含 app/server/server.cjs 服务端、app/www 网页(admin/auth/项目云/库备份/settings)、 app/ui 图标、cmd 安装脚本、config、wizard、manifest、图标与对接文档。 按仓库规则排除构建产物 *.fpk 与 .mimosa 缓存。
131 lines
3.0 KiB
Bash
Executable File
131 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
LOG_FILE="${TRIM_PKGVAR}/info.log"
|
|
PID_FILE="${TRIM_PKGVAR}/app.pid"
|
|
|
|
NODE_BIN="/var/apps/nodejs_v22/target/bin/node"
|
|
[ ! -x "${NODE_BIN}" ] && NODE_BIN="$(command -v node || echo node)"
|
|
SERVER="${TRIM_APPDEST}/server/server.cjs"
|
|
|
|
# 从 app.env 读取向导持久化的配置(install_callback/config_callback 写入)
|
|
CFG_FILE="${TRIM_PKGETC}/app.env"
|
|
HY_PORT=""
|
|
HY_DB_DIR=""
|
|
if [ -f "${CFG_FILE}" ]; then
|
|
while IFS='=' read -r k v; do
|
|
case "$k" in
|
|
HY_PORT) HY_PORT="$v" ;;
|
|
HY_DB_DIR) HY_DB_DIR="$v" ;;
|
|
esac
|
|
done < "${CFG_FILE}"
|
|
fi
|
|
[ -z "${HY_PORT}" ] && HY_PORT="${TRIM_SERVICE_PORT:-12701}"
|
|
|
|
CMD="${NODE_BIN} ${SERVER}"
|
|
|
|
log_msg() {
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> ${LOG_FILE}
|
|
}
|
|
|
|
start_process() {
|
|
if status; then
|
|
return 0
|
|
fi
|
|
|
|
log_msg "Starting process (port=${HY_PORT} dbdir=${HY_DB_DIR:-默认}) ..."
|
|
# run cmd to start process
|
|
HY_PORT="${HY_PORT}" HY_DB_DIR="${HY_DB_DIR}" HY_CFG="${CFG_FILE}" \
|
|
bash -c "${CMD}" >> ${LOG_FILE} 2>&1 &
|
|
# write pid to pidfile
|
|
printf "%s" "$!" > "${PID_FILE}"
|
|
sleep 2
|
|
# 启动后确认进程仍在,失败时提示日志位置
|
|
if status; then
|
|
return 0
|
|
fi
|
|
echo "会员服务器启动失败,请查看日志: ${LOG_FILE}" >&2
|
|
return 1
|
|
}
|
|
|
|
stop_process() {
|
|
log_msg "Stopping process ..."
|
|
|
|
if [ -r "${PID_FILE}" ]; then
|
|
pid=$(head -n 1 "${PID_FILE}" | tr -d '[:space:]')
|
|
|
|
log_msg "pid=${pid}"
|
|
if ! check_process "${pid}"; then
|
|
# process not exist, delete pidfile
|
|
rm -f "${PID_FILE}"
|
|
log_msg "remove pid file 1"
|
|
return
|
|
fi
|
|
|
|
log_msg "send TERM signal to PID:${pid}..."
|
|
kill -TERM ${pid} >> ${LOG_FILE} 2>&1
|
|
|
|
local count=0
|
|
while check_process "${pid}" && [ $count -lt 10 ]; do
|
|
sleep 1
|
|
count=$((count + 1))
|
|
log_msg "waiting process terminal... (${count}s/10s)"
|
|
done
|
|
|
|
if check_process "${pid}"; then
|
|
log_msg "send KILL signal to PID:${pid}..."
|
|
kill -KILL ${pid}
|
|
sleep 1
|
|
rm -f "${PID_FILE}"
|
|
else
|
|
log_msg "process killed... "
|
|
fi
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
check_process() {
|
|
local pid=$1
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
return 0 # process exist
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
status() {
|
|
if [ -f "${PID_FILE}" ]; then
|
|
pid=$(head -n 1 "${PID_FILE}" | tr -d '[:space:]')
|
|
if check_process "${pid}"; then
|
|
return 0
|
|
else
|
|
# Process is not running but pidfile exists - clean it up
|
|
rm -f "${PID_FILE}"
|
|
fi
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
case $1 in
|
|
start)
|
|
# run start command. exit 0 if success, exit 1 if failed
|
|
start_process
|
|
;;
|
|
stop)
|
|
# run stop command. exit 0 if success, exit 1 if failed
|
|
stop_process
|
|
;;
|
|
status)
|
|
# check application status command. exit 0 if running, exit 3 if not running
|
|
if status; then
|
|
exit 0
|
|
else
|
|
exit 3
|
|
fi
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|