#!/bin/sh set -eu : "${RELEASE_COMMON_SH:=/usr/local/bin/release-common.sh}" : "${SUPERVISORD_BIN:=/usr/bin/supervisord}" : "${OPEN_FILE_LIMIT:=65535}" . "$RELEASE_COMMON_SH" export RUNTIME_DIR export SUPERVISOR_CONF shell_quote() { printf "'%s'" "$(printf '%s' "$1" | sed "s/'/'\"'\"'/g")" } write_run_app_script() { run_app_script="$RUNTIME_DIR/run-app.sh" { printf '#!/bin/sh\n' printf 'set -eu\n' printf 'exec "%s"' "$(current_binary_path)" for arg in "$@"; do printf ' %s' "$(shell_quote "$arg")" done printf '\n' } > "$run_app_script" chmod +x "$run_app_script" } prepare_runtime_environment() { ulimit -n "$OPEN_FILE_LIMIT" ensure_runtime_dirs rm -f "$RUNTIME_DIR/supervisor.sock" "$RUNTIME_DIR/supervisord.pid" } bootstrap_release_or_exit() { if ! ensure_initial_release; then echo "错误: 初次启动时无法准备可运行版本" >&2 exit 1 fi } start_supervisord() { exec "$SUPERVISORD_BIN" -c "$SUPERVISOR_CONF" } main() { prepare_runtime_environment bootstrap_release_or_exit write_run_app_script "$@" start_supervisord } main "$@"