Spaces:
Running
Running
| set -eu | |
| : "${RELEASE_COMMON_SH:=/usr/local/bin/release-common.sh}" | |
| : "${SUPERVISORD_BIN:=/usr/bin/supervisord}" | |
| : "${SUPERVISOR_CONF_TEMPLATE:=/etc/supervisord.conf.template}" | |
| : "${OPEN_FILE_LIMIT:=65535}" | |
| . "$RELEASE_COMMON_SH" | |
| export RUNTIME_DIR | |
| export SUPERVISOR_CONF | |
| shell_quote() { | |
| printf "'%s'" "$(printf '%s' "$1" | sed "s/'/'\"'\"'/g")" | |
| } | |
| escape_sed_replacement() { | |
| printf '%s' "$1" | sed 's/[\/&]/\\&/g' | |
| } | |
| write_supervisord_conf() { | |
| mkdir -p "$(dirname "$SUPERVISOR_CONF")" | |
| app_program_name=$(escape_sed_replacement "$SUPERVISOR_PROGRAM_NAME") | |
| updater_program_name=$(escape_sed_replacement "$SUPERVISOR_UPDATER_PROGRAM_NAME") | |
| sed \ | |
| -e "s/__APP_PROGRAM__/$app_program_name/g" \ | |
| -e "s/__UPDATER_PROGRAM__/$updater_program_name/g" \ | |
| "$SUPERVISOR_CONF_TEMPLATE" > "$SUPERVISOR_CONF" | |
| } | |
| 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 | |
| write_supervisord_conf | |
| bootstrap_release_or_exit | |
| write_run_app_script "$@" | |
| start_supervisord | |
| } | |
| main "$@" | |