fix: preserve container startup diagnostics

This commit is contained in:
whyour
2026-08-18 00:40:40 +08:00
parent f71fd5ebd6
commit dfa73af104
7 changed files with 249 additions and 33 deletions
+58 -18
View File
@@ -23,37 +23,75 @@ copy_dep() {
}
pm2_log() {
t '---> pm2日志'
local panelOut="/root/.pm2/logs/qinglong-out.log"
local panelError="/root/.pm2/logs/qinglong-error.log"
tail -n 300 "$panelOut"
tail -n 300 "$panelError"
t '---> 服务诊断信息'
pm2 status || true
local systemLogDir="$dir_data/syslog"
local latestSystemLog
latestSystemLog=$(find "$systemLogDir" -maxdepth 1 -type f -name '*.log' 2>/dev/null | sort | tail -n 1)
if [[ -n "$latestSystemLog" ]]; then
t '---> 最近的系统日志: %s' "$latestSystemLog"
tail -n 300 "$latestSystemLog"
else
t '---> 未找到系统日志: %s' "$systemLogDir"
fi
if [[ "$QL_CONTAINER" == "true" ]]; then
t '---> 容器内 PM2 日志不落盘;早期启动错误请执行 docker logs --tail 300 <容器名>'
return
fi
local pm2Home="${PM2_HOME:-$HOME/.pm2}"
local panelOut="$pm2Home/logs/qinglong-out.log"
local panelError="$pm2Home/logs/qinglong-error.log"
[[ -f "$panelOut" ]] && tail -n 300 "$panelOut"
[[ -f "$panelError" ]] && tail -n 300 "$panelError"
}
check_ql() {
local api=$(curl -s --noproxy "*" "http://localhost:${ql_port}")
local basePath="${ql_base_url%/}"
local api
local attempt
for ((attempt = 1; attempt <= 10; attempt++)); do
api=$(curl -s --max-time 2 --noproxy "*" "http://localhost:${ql_port}${basePath}/")
[[ $api =~ "<div id=\"root\"></div>" ]] && break
sleep 1
done
t '\n=====> 检测面板'
echo -e "\n\n$api\n"
if [[ $api =~ "<div id=\"root\"></div>" ]]; then
t '=====> 面板服务启动正常\n'
else
t '=====> 面板服务启动异常,请检查上方诊断信息\n'
return 1
fi
}
check_pm2() {
pm2_log
local currentTimeStamp=$(date +%s)
local api=$(
curl -s --noproxy "*" "http://localhost:${ql_port}/api/system?t=$currentTimeStamp" \
-H 'Accept: */*' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36' \
-H "Referer: http://localhost:${ql_port}/crontab" \
-H 'Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' \
--compressed
)
local basePath="${ql_base_url%/}"
local api
local attempt
for ((attempt = 1; attempt <= 10; attempt++)); do
api=$(
curl -s --max-time 2 --noproxy "*" "http://localhost:${ql_port}${basePath}/api/health?t=$currentTimeStamp" \
-H 'Accept: */*' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36' \
-H "Referer: http://localhost:${ql_port}/crontab" \
-H 'Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' \
--compressed
)
[[ $api == *'"code":200'* && $api == *'"status":"ok"'* ]] && break
sleep 1
done
t '\n=====> 检测后台'
echo -e "\n\n$api\n"
if [[ $api =~ "{\"code\"" ]]; then
if [[ $api == *'"code":200'* && $api == *'"status":"ok"'* ]]; then
t '=====> 后台服务启动正常\n'
else
pm2_log
t '=====> 后台服务启动异常,请检查上方诊断信息\n'
return 1
fi
}
@@ -63,10 +101,12 @@ main() {
reset_env
copy_dep
check_ql
check_pm2
reload_pm2
local checkStatus=0
check_ql || checkStatus=1
check_pm2 || checkStatus=1
t '\n=====> 检测结束\n'
return $checkStatus
}
main
+6
View File
@@ -82,10 +82,16 @@ declare -gA LANG_MESSAGES=(
['---> 复制一份 %s 为 %s\n']='---> Copying %s to %s\n'
['---> 通知文件复制完成\n']='---> Notification files copied\n'
['---> pm2日志']='---> pm2 log'
['---> 服务诊断信息']='---> Service diagnostics'
['---> 最近的系统日志: %s']='---> Recent system log: %s'
['---> 未找到系统日志: %s']='---> No system log found: %s'
['---> 容器内 PM2 日志不落盘;早期启动错误请执行 docker logs --tail 300 <容器名>']='---> PM2 logs are not persisted in containers; run docker logs --tail 300 <container> for early startup errors'
['\n=====> 检测面板']='\n=====> Checking panel'
['=====> 面板服务启动正常\n']='=====> Panel service running normally\n'
['=====> 面板服务启动异常,请检查上方诊断信息\n']='=====> Panel failed to start; check the diagnostics above\n'
['\n=====> 检测后台']='\n=====> Checking backend'
['=====> 后台服务启动正常\n']='=====> Backend service running normally\n'
['=====> 后台服务启动异常,请检查上方诊断信息\n']='=====> Backend failed to start; check the diagnostics above\n'
['=====> 开始检测']='=====> Starting check'
['\n=====> 检测结束\n']='\n=====> Check complete\n'
# rmlog.sh
+6
View File
@@ -82,10 +82,16 @@ declare -gA LANG_MESSAGES=(
['---> 复制一份 %s 为 %s\n']='---> 复制一份 %s 为 %s\n'
['---> 通知文件复制完成\n']='---> 通知文件复制完成\n'
['---> pm2日志']='---> pm2日志'
['---> 服务诊断信息']='---> 服务诊断信息'
['---> 最近的系统日志: %s']='---> 最近的系统日志: %s'
['---> 未找到系统日志: %s']='---> 未找到系统日志: %s'
['---> 容器内 PM2 日志不落盘;早期启动错误请执行 docker logs --tail 300 <容器名>']='---> 容器内 PM2 日志不落盘;早期启动错误请执行 docker logs --tail 300 <容器名>'
['\n=====> 检测面板']='\n=====> 检测面板'
['=====> 面板服务启动正常\n']='=====> 面板服务启动正常\n'
['=====> 面板服务启动异常,请检查上方诊断信息\n']='=====> 面板服务启动异常,请检查上方诊断信息\n'
['\n=====> 检测后台']='\n=====> 检测后台'
['=====> 后台服务启动正常\n']='=====> 后台服务启动正常\n'
['=====> 后台服务启动异常,请检查上方诊断信息\n']='=====> 后台服务启动异常,请检查上方诊断信息\n'
['=====> 开始检测']='=====> 开始检测'
['\n=====> 检测结束\n']='\n=====> 检测结束\n'
# rmlog.sh