self / entrypoint.sh
cnxqchen's picture
Upload 5 files
fa7fe4b verified
#!/bin/sh
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 "$@"