忽略部署脚本defunct进程

This commit is contained in:
wkc
2026-04-01 11:06:53 +08:00
parent f874e2d942
commit 54eabaebd8
3 changed files with 64 additions and 1 deletions

View File

@@ -132,7 +132,7 @@ deploy_frontend_dist() {
collect_backend_pids() {
ps -ef | awk -v marker="$BACKEND_MARKER" -v jar="$BACKEND_JAR_TARGET" '
index($0, marker) > 0 && index($0, jar) > 0 {print $2}
index($0, "<defunct>") == 0 && index($0, marker) > 0 && index($0, jar) > 0 {print $2}
' | xargs 2>/dev/null || true
}

View File

@@ -171,6 +171,38 @@ test_multiple_release_zip_should_fail() {
cleanup_release_dir "$release_dir"
}
test_defunct_process_should_be_ignored() {
release_dir=$(mktemp -d)
backend_port=$(find_free_port)
trap 'cleanup_release_dir "$release_dir"' EXIT INT TERM
prepare_release_dir "$release_dir" "$backend_port"
mkdir -p "$release_dir/fake-ps-bin"
cat > "$release_dir/fake-ps-bin/ps" <<EOF
#!/bin/sh
if [ "\$1" = "-ef" ]; then
cat <<'PSOUT'
UID PID PPID C STIME TTY TIME CMD
root 99999 1 0 00:00 ? 00:00:00 [java] <defunct> -Dloan.pricing.home=$release_dir -jar $release_dir/backend/ruoyi-admin.jar
PSOUT
exit 0
fi
/bin/ps "\$@"
EOF
chmod +x "$release_dir/fake-ps-bin/ps"
(
cd "$release_dir"
PATH="$release_dir/fake-ps-bin:/usr/bin:/bin" ./deploy_from_package.sh
)
backend_pid=$(cat "$release_dir/backend/backend.pid")
kill -0 "$backend_pid" 2>/dev/null || fail "expected backend pid to be running when defunct process is ignored"
trap - EXIT INT TERM
cleanup_release_dir "$release_dir"
}
test_should_use_ps_ef_for_process_detection() {
if rg -n 'pgrep' "$SCRIPT_UNDER_TEST" >/dev/null 2>&1; then
fail "expected deploy_from_package.sh not to depend on pgrep"
@@ -190,6 +222,7 @@ main() {
test_should_use_ps_ef_for_process_detection
test_deploy_success
test_multiple_release_zip_should_fail
test_defunct_process_should_be_ignored
printf 'PASS: deploy_from_package tests\n'
}