Skip to content

Commit ad4cb8f

Browse files
committed
fix: 修复启动时候的基础环境变量,
1 parent 6415aaa commit ad4cb8f

1 file changed

Lines changed: 83 additions & 35 deletions

File tree

cmd/main

Lines changed: 83 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,83 @@
33
DATA_DIR="${TRIM_DATA_SHARE_PATHS%%:*}"
44
LOG_FILE="${DATA_DIR}/run.log"
55
PID_FILE="${TRIM_PKGVAR}/app.pid"
6+
ENV_FILE="${TRIM_APPDEST}/server/.env"
67

78
DP_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

1628
log_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

2085
start_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

Comments
 (0)