33DATA_DIR=" ${TRIM_DATA_SHARE_PATHS%%:* } "
44LOG_FILE=" ${DATA_DIR} /run.log"
55PID_FILE=" ${TRIM_PKGVAR} /app.pid"
6+ ENV_FILE=" ${TRIM_APPDEST} /server/.env"
67
78DP_STORAGE_LOCAL_PATH=" ${DATA_DIR} /data"
8-
9- # write the command to start your program here
10- CMD=" ${TRIM_APPDEST} /server/dpanel \
11- -e APP_SERVER_PORT=${DP_APP_SERVER_PORT} \
12- -e STORAGE_LOCAL_PATH=${DP_STORAGE_LOCAL_PATH} \
13- -e APP_SERVER_SOCKET=${TRIM_APPDEST} /dpanel.sock \
14- -e DP_RUN_IN_FNNAS=1"
9+ APP_SERVER_SOCKET=" ${TRIM_APPDEST} /dpanel.sock"
10+
11+ DPANEL_BIN=" ${TRIM_APPDEST} /server/dpanel"
12+ DPANEL_ENV=(
13+ " APP_SERVER_PORT=${DP_APP_SERVER_PORT} "
14+ " STORAGE_LOCAL_PATH=${DP_STORAGE_LOCAL_PATH} "
15+ " APP_SERVER_SOCKET=${APP_SERVER_SOCKET} "
16+ " DP_RUN_IN_FNNAS=1"
17+ " SHELL=/bin/bash"
18+ " HOME=${DP_STORAGE_LOCAL_PATH} "
19+ " USER=${TRIM_RUN_USERNAME} "
20+ " LOGNAME=${TRIM_RUN_USERNAME} "
21+ " PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
22+ " LANG=en_US.UTF-8"
23+ " LANGUAGE=en_US:en"
24+ " TERM=xterm-256color"
25+ " COLORTERM=truecolor"
26+ )
1527
1628log_msg () {
17- echo " $( date ' +%Y-%m-%d %H:%M:%S' ) - $1 " >> ${LOG_FILE}
29+ echo " $( date ' +%Y-%m-%d %H:%M:%S' ) - $1 " >> " ${LOG_FILE} "
30+ }
31+
32+ build_dpanel_args () {
33+ DPANEL_ARGS=()
34+ local env
35+ for env in " ${DPANEL_ENV[@]} " ; do
36+ DPANEL_ARGS+=(-e " ${env} " )
37+ done
38+ }
39+
40+ write_env_file () {
41+ mkdir -p " $( dirname " ${ENV_FILE} " ) "
42+ printf " %s\n" " ${DPANEL_ENV[@]} " > " ${ENV_FILE} "
43+ }
44+
45+ terminate_process () {
46+ local pid=$1
47+
48+ if [ -z " ${pid} " ] || ! check_process " ${pid} " ; then
49+ return 0
50+ fi
51+
52+ log_msg " send TERM signal to PID:${pid} ..."
53+ kill -TERM " ${pid} " >> " ${LOG_FILE} " 2>&1
54+
55+ local count=0
56+ while check_process " ${pid} " && [ $count -lt 10 ]; do
57+ sleep 1
58+ count=$(( count + 1 ))
59+ log_msg " waiting process terminal... (${count} s/10s)"
60+ done
61+
62+ if check_process " ${pid} " ; then
63+ log_msg " send KILL signal to PID:${pid} ..."
64+ kill -KILL " ${pid} " >> " ${LOG_FILE} " 2>&1
65+ sleep 1
66+ else
67+ log_msg " process killed... "
68+ fi
69+ }
70+
71+ cleanup_existing_process () {
72+ if command -v pgrep > /dev/null 2>&1 ; then
73+ pids=$( pgrep -f " ${TRIM_APPDEST} /server/dpanel" )
74+ for pid in ${pids} ; do
75+ [ " ${pid} " = " $$ " ] && continue
76+ log_msg " cleanup existing dpanel process pid=${pid} "
77+ terminate_process " ${pid} "
78+ done
79+ fi
80+
81+ rm -f " ${APP_SERVER_SOCKET} "
82+ rm -f " ${PID_FILE} "
1883}
1984
2085start_process () {
@@ -44,19 +109,18 @@ start_process() {
44109 log_msg " [App] 存储空间: ${TRIM_APPDEST_VOL:- -} "
45110 log_msg " [App] 共享目录: ${TRIM_DATA_SHARE_PATHS:- -} "
46111
47- if status; then
48- return 0
49- fi
50-
51112 log_msg " Starting process ..."
52113 # run cmd to start process
53114 export PATH=" /usr/local/bin:/usr/bin:/bin:$PATH "
54- bash -c " ${CMD} server:start" >> ${LOG_FILE} 2>&1 &
115+ cleanup_existing_process
116+ build_dpanel_args
117+ write_env_file
118+ " ${DPANEL_BIN} " " ${DPANEL_ARGS[@]} " server:start >> " ${LOG_FILE} " 2>&1 &
55119 # write pid to pidfile
56120 PID=$!
57- printf " %s" " $PID " > ${PID_FILE}
58- log_msg " CMD = ${CMD} "
59- log_msg " pid = $PID "
121+ printf " %s\n " " ${ PID} " > " ${PID_FILE} "
122+ log_msg " CMD = ${DPANEL_BIN} ${DPANEL_ARGS[*]} server:start "
123+ log_msg " pid = ${ PID} "
60124
61125 if [ -n " ${DP_INIT_USERNAME} " ] && [ -n " ${DP_INIT_PASSWORD} " ]; then
62126 log_msg " Init user ... ${DP_INIT_USERNAME} /${DP_INIT_PASSWORD} "
@@ -67,7 +131,7 @@ start_process() {
67131 sleep 1
68132 (( COUNT++ ))
69133 done
70- bash -c " ${CMD} user:reset --username ${DP_INIT_USERNAME} --password ${DP_INIT_PASSWORD} " >> ${LOG_FILE} 2>&1 &
134+ " ${DPANEL_BIN} " " ${DPANEL_ARGS[@]} " user:reset --username " ${DP_INIT_USERNAME} " --password " ${DP_INIT_PASSWORD} " >> " ${LOG_FILE} " 2>&1 &
71135 fi
72136
73137 return 0
@@ -87,24 +151,8 @@ stop_process() {
87151 return
88152 fi
89153
90- log_msg " send TERM signal to PID:${pid} ..."
91- kill -TERM ${pid} >> ${LOG_FILE} 2>&1
92-
93- local count=0
94- while check_process " ${pid} " && [ $count -lt 10 ]; do
95- sleep 1
96- count=$(( count + 1 ))
97- log_msg " waiting process terminal... (${count} s/10s)"
98- done
99-
100- if check_process " ${pid} " ; then
101- log_msg " send KILL signal to PID:${pid} ..."
102- kill -KILL " ${pid} "
103- sleep 1
104- rm -f " ${PID_FILE} "
105- else
106- log_msg " process killed... "
107- fi
154+ terminate_process " ${pid} "
155+ rm -f " ${PID_FILE} "
108156 fi
109157
110158 return 0
0 commit comments