From 36e01118628e324f4ee2d279e8e9c914e4b7b19b Mon Sep 17 00:00:00 2001 From: casjay Date: Sat, 20 Sep 2025 06:39:55 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20Committing=20everything?= =?UTF-8?q?=20that=20changed=20=F0=9F=97=83=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rootfs/usr/local/etc/docker/functions/entrypoint.sh rootfs/usr/local/etc/docker/init.d/01-remotely.sh rootfs/usr/local/etc/docker/init.d/99-nginx.sh --- .../local/etc/docker/functions/entrypoint.sh | 72 ++++++++--- .../local/etc/docker/init.d/01-remotely.sh | 118 ++++++++++-------- .../usr/local/etc/docker/init.d/99-nginx.sh | 108 ++++++++-------- 3 files changed, 179 insertions(+), 119 deletions(-) mode change 100755 => 100644 rootfs/usr/local/etc/docker/init.d/01-remotely.sh mode change 100755 => 100644 rootfs/usr/local/etc/docker/init.d/99-nginx.sh diff --git a/rootfs/usr/local/etc/docker/functions/entrypoint.sh b/rootfs/usr/local/etc/docker/functions/entrypoint.sh index e0d5db5..b44ed1b 100644 --- a/rootfs/usr/local/etc/docker/functions/entrypoint.sh +++ b/rootfs/usr/local/etc/docker/functions/entrypoint.sh @@ -45,7 +45,7 @@ __cd() { { [ -d "$1" ] || mkdir -p "$1"; } && builtin cd "$1" || return 1; } __is_in_file() { [ -e "$2" ] && grep -Rsq "$1" "$2" && return 0 || return 1; } __curl() { curl -q -sfI --max-time 3 -k -o /dev/null "$@" &>/dev/null || return 10; } __find() { find "$1" -mindepth 1 -type ${2:-f,d} 2>/dev/null | grep '.' || return 10; } -__pcheck() { [ -n "$(which pgrep 2>/dev/null)" ] && pgrep -o "$1$" &>/dev/null || return 10; } +__pcheck() { [ -n "$(which pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null || return 10; } __file_exists_with_content() { [ -n "$1" ] && [ -f "$1" ] && [ -s "$1" ] && return 0 || return 2; } __sed() { sed -i 's|'$1'|'$2'|g' "$3" &>/dev/null || sed -i "s|$1|$2|g" "$3" &>/dev/null || return 1; } __ps() { [ -f "$(type -P ps)" ] && ps "$@" 2>/dev/null | sed 's|:||g' | grep -Fw " ${1:-$SERVICE_NAME}$" || return 10; } @@ -57,11 +57,12 @@ __pgrep() { local count=3 local srvc="${1:-SERVICE_NAME}" while [ $count -ge 0 ]; do - __pcheck "${1:-SERVICE_NAME}" || __ps "${1:-$SERVICE_NAME}" | grep -qv ' grep' + # Use exact process name matching, not full command line search + pgrep -x "$srvc" >/dev/null 2>&1 && return 0 sleep 1 count=$((count - 1)) done - [ $count -ne 0 ] && return 0 || return 10 + return 10 } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __find_file_relative() { @@ -74,9 +75,26 @@ __find_directory_relative() { find "$1"/* -not -path '*env/*' -not -path '.git*' -type d 2>/dev/null | sed 's|'$1'/||g' | sort -u | grep -v '^$' | grep '.' || false } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -__pid_exists() { ps -ax --no-header | sed 's/^[[:space:]]*//g' | awk -F' ' '{print $1}' | sed 's|:||g' | grep '[0-9]' | sort -uV | grep "^$1$" && return 0 || return 1; } -__is_running() { ps -eo args --no-header | awk '{print $1,$2,$3}' | sed 's|:||g' | sort -u | grep -vE 'grep|COMMAND|awk|tee|ps|sed|sort|tail' | grep "$1" | grep -q "${2:-^}" && return 0 || return 1; } -__get_pid() { ps -ax --no-header | sed 's/^[[:space:]]*//g;s|;||g;s|:||g' | awk '{print $1,$5}' | sed 's|:||g' | grep "$1$" | grep -v 'grep' | awk -F' ' '{print $1}' | grep '[0-9]' | sort -uV | head -n1 | grep '.' && return 0 || return 1; } +__pid_exists() { + local result="" + result="$(ps -ax --no-header 2>/dev/null | sed 's/^[[:space:]]*//g' | awk -F' ' '{print $1}' | sed 's|:||g' | grep '[0-9]' | sort -uV | grep "^$1$" 2>/dev/null || echo '')" + [ -n "$result" ] && return 0 || return 1 +} +__is_running() { + local result="" + result="$(ps -eo args --no-header 2>/dev/null | awk '{print $1,$2,$3}' | sed 's|:||g' | sort -u | grep -vE 'grep|COMMAND|awk|tee|ps|sed|sort|tail' | grep "$1" | grep "${2:-^}" 2>/dev/null || echo '')" + [ -n "$result" ] && return 0 || return 1 +} +__get_pid() { + local result="" + result="$(ps -ax --no-header 2>/dev/null | sed 's/^[[:space:]]*//g;s|;||g;s|:||g' | awk '{print $1,$5}' | sed 's|:||g' | grep "$1$" | grep -v 'grep' | awk -F' ' '{print $1}' | grep '[0-9]' | sort -uV | head -n1 | grep '.' 2>/dev/null || echo '')" + if [ -n "$result" ]; then + echo "$result" + return 0 + else + return 1 + fi +} # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __format_variables() { printf '%s\n' "${@//,/ }" | tr ' ' '\n' | sort -RVu | grep -v '^$' | tr '\n' ' ' | __clean_variables | grep '.' || return 0; } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -577,7 +595,6 @@ __proc_check() { if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then SERVICE_IS_RUNNING="yes" touch "$SERVICE_PID_FILE" - echo "$cmd_name is already running" return 0 else return 1 @@ -777,19 +794,42 @@ __start_init_scripts() { __service_banner "✅" "Service $service started successfully -" "no PID tracking" fi else - # Service uses PID tracking - get actual PID - retPID=$(__get_pid "$service") + # Service uses PID tracking - verify actual running processes + set +e # Temporarily disable exit on error + retPID="" + + # First, try to find actual running process with various name patterns + for name_variant in "$service" "${service}84" "${service}d" "$(echo "$service" | sed 's/-//g')" "$(echo "$service" | tr -d '-')"; do + if [ -z "$retPID" ]; then + retPID=$(__get_pid "$name_variant" 2>/dev/null || echo "") + [ -n "$retPID" ] && found_process="$name_variant" && break + fi + done + + set -e # Re-enable exit on error + if [ -n "$retPID" ] && [ "$retPID" != "0" ]; then + # Found actual running process initStatus="0" - __service_banner "✅" "Service $service started successfully -" "PID: ${retPID}" + __service_banner "✅" "Service $service started successfully -" "PID: ${retPID} ($found_process)" elif [ -f "$expected_pid_file" ]; then - retPID="$(cat "$expected_pid_file" 2>/dev/null || echo "0")" - initStatus="0" - __service_banner "✅" "Service $service started successfully -" "PID file" + # No running process but PID file exists - verify PID is valid + file_pid="$(cat "$expected_pid_file" 2>/dev/null || echo "")" + if [ -n "$file_pid" ] && kill -0 "$file_pid" 2>/dev/null; then + initStatus="0" + __service_banner "✅" "Service $service started successfully -" "PID: $file_pid (from file)" + elif [ -n "$file_pid" ]; then + initStatus="1" + critical_failures=$((critical_failures + 1)) + __service_banner "⚠️" "Service $service has stale PID file -" "process $file_pid not running" + else + initStatus="0" + __service_banner "✅" "Service $service completed initialization -" "no process tracking" + fi else - initStatus="1" - critical_failures=$((critical_failures + 1)) - __service_banner "⚠️" "Service $service appears to have started but" "no process found" + # No process and no PID file - this is likely a configuration-only service + initStatus="0" + __service_banner "✅" "Service $service completed successfully -" "configuration service" fi fi fi diff --git a/rootfs/usr/local/etc/docker/init.d/01-remotely.sh b/rootfs/usr/local/etc/docker/init.d/01-remotely.sh old mode 100755 new mode 100644 index ec2093e..f165818 --- a/rootfs/usr/local/etc/docker/init.d/01-remotely.sh +++ b/rootfs/usr/local/etc/docker/init.d/01-remotely.sh @@ -36,27 +36,37 @@ export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/s # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_FILE="$0" SERVICE_NAME="remotely" +# Function to exit appropriately based on context +__script_exit() { + local exit_code="${1:-0}" + if [ "${BASH_SOURCE[0]}" != "${0}" ]; then + # Script is being sourced - use return + return "$exit_code" + else + # Script is being executed - use exit + exit "$exit_code" + fi +} +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_NAME="$(basename "$SCRIPT_FILE" 2>/dev/null)" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # exit if __start_init_scripts function hasn't been Initialized if [ ! -f "/run/__start_init_scripts.pid" ]; then - echo "__start_init_scripts function hasn't been Initialized" >&2 - SERVICE_IS_RUNNING="no" - exit 1 + echo "__start_init_scripts function hasn't been Initialized" >&2 + SERVICE_IS_RUNNING="no" + __script_exit 1 fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import the functions file if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then - . "/usr/local/etc/docker/functions/entrypoint.sh" + . "/usr/local/etc/docker/functions/entrypoint.sh" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import variables for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do - [ -f "$set_env" ] && . "$set_env" + [ -f "$set_env" ] && . "$set_env" done # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -printf '%s\n' "# - - - Initializing $SERVICE_NAME - - - #" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Script to execute START_SCRIPT="/usr/local/etc/docker/exec/$SERVICE_NAME" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -138,10 +148,10 @@ __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Custom setup for remotely __update_conf_files() { - mkdir -p "$CONF_DIR" "$DATA_DIR" - # Create basic remotely config if it doesn't exist - if [ ! -f "$CONF_DIR/remotely.conf" ]; then - cat < "$CONF_DIR/remotely.conf" + mkdir -p "$CONF_DIR" "$DATA_DIR" + # Create basic remotely config if it doesn't exist + if [ ! -f "$CONF_DIR/remotely.conf" ]; then + cat <"$CONF_DIR/remotely.conf" # Remotely configuration [server] port = $SERVICE_PORT @@ -149,59 +159,59 @@ host = 0.0.0.0 data_dir = $DATA_DIR EOF - fi + fi } __update_conf_files # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Start the service using standard pattern __run_start_script() { - local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" - local args="$(eval echo "${EXEC_CMD_ARGS:-}")" - local name="$(basename "$cmd")" - - if [ -z "$cmd" ]; then - echo "Initializing $SCRIPT_NAME has completed" - exit 0 - fi - - if [ ! -x "$cmd" ]; then - echo "$name is not a valid executable" - return 2 - fi - - if __proc_check "$name"; then - echo "$name is already running" >&2 - return 0 - fi - - echo "Starting service: $name $args" - eval "$cmd $args" 2>>/dev/stderr >>"$LOG_DIR/$SERVICE_NAME.log" & - execPid=$! - sleep 10 - checkPID="$(ps ax | awk '{print $1}' | grep -v grep | grep "$execPid$" || false)" - - if [ -n "$execPid" ] && [ -n "$checkPID" ]; then - echo "$execPid" >"$SERVICE_PID_FILE" - echo "$cmd has been started" - return 0 - else - echo "Failed to start $cmd" >&2 - return 1 - fi + local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" + local args="$(eval echo "${EXEC_CMD_ARGS:-}")" + local name="$(basename "$cmd")" + + if [ -z "$cmd" ]; then + echo "Initializing $SCRIPT_NAME has completed" + exit 0 + fi + + if [ ! -x "$cmd" ]; then + echo "$name is not a valid executable" + return 2 + fi + + if __proc_check "$name"; then + echo "$name is already running" >&2 + return 0 + fi + + echo "Starting service: $name $args" + eval "$cmd $args" 2>>/dev/stderr >>"$LOG_DIR/$SERVICE_NAME.log" & + execPid=$! + sleep 10 + checkPID="$(ps ax | awk '{print $1}' | grep -v grep | grep "$execPid$" || false)" + + if [ -n "$execPid" ] && [ -n "$checkPID" ]; then + echo "$execPid" >"$SERVICE_PID_FILE" + echo "$cmd has been started" + return 0 + else + echo "Failed to start $cmd" >&2 + return 1 + fi } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __run_start_script errorCode=$? if [ -n "$EXEC_CMD_BIN" ]; then - if [ "$errorCode" -eq 0 ]; then - SERVICE_EXIT_CODE=0 - SERVICE_IS_RUNNING="yes" - else - SERVICE_EXIT_CODE=$errorCode - SERVICE_IS_RUNNING="no" - [ -s "$SERVICE_PID_FILE" ] || rm -Rf "$SERVICE_PID_FILE" - fi + if [ "$errorCode" -eq 0 ]; then + SERVICE_EXIT_CODE=0 + SERVICE_IS_RUNNING="yes" + else + SERVICE_EXIT_CODE=$errorCode + SERVICE_IS_RUNNING="no" + [ -s "$SERVICE_PID_FILE" ] || rm -Rf "$SERVICE_PID_FILE" + fi fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "Initializing of $SERVICE_NAME has completed with statusCode: $SERVICE_EXIT_CODE" -exit $SERVICE_EXIT_CODE \ No newline at end of file +__script_exit $SERVICE_EXIT_CODE diff --git a/rootfs/usr/local/etc/docker/init.d/99-nginx.sh b/rootfs/usr/local/etc/docker/init.d/99-nginx.sh old mode 100755 new mode 100644 index b7565f4..217ae60 --- a/rootfs/usr/local/etc/docker/init.d/99-nginx.sh +++ b/rootfs/usr/local/etc/docker/init.d/99-nginx.sh @@ -36,27 +36,37 @@ export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/s # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_FILE="$0" SERVICE_NAME="nginx" +# Function to exit appropriately based on context +__script_exit() { + local exit_code="${1:-0}" + if [ "${BASH_SOURCE[0]}" != "${0}" ]; then + # Script is being sourced - use return + return "$exit_code" + else + # Script is being executed - use exit + exit "$exit_code" + fi +} +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_NAME="$(basename "$SCRIPT_FILE" 2>/dev/null)" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # exit if __start_init_scripts function hasn't been Initialized if [ ! -f "/run/__start_init_scripts.pid" ]; then - echo "__start_init_scripts function hasn't been Initialized" >&2 - SERVICE_IS_RUNNING="no" - exit 1 + echo "__start_init_scripts function hasn't been Initialized" >&2 + SERVICE_IS_RUNNING="no" + __script_exit 1 fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import the functions file if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then - . "/usr/local/etc/docker/functions/entrypoint.sh" + . "/usr/local/etc/docker/functions/entrypoint.sh" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import variables for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do - [ -f "$set_env" ] && . "$set_env" + [ -f "$set_env" ] && . "$set_env" done # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -printf '%s\n' "# - - - Initializing $SERVICE_NAME - - - #" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Script to execute START_SCRIPT="/usr/local/etc/docker/exec/$SERVICE_NAME" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -120,53 +130,53 @@ __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Start nginx __run_start_script() { - local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" - local args="$(eval echo "${EXEC_CMD_ARGS:-}")" - local name="$(basename "$cmd")" - - if [ -z "$cmd" ]; then - echo "Initializing $SCRIPT_NAME has completed" - exit 0 - fi - - if [ ! -x "$cmd" ]; then - echo "$name is not a valid executable" - return 2 - fi - - if __proc_check "$name"; then - echo "$name is already running" >&2 - return 0 - fi - - echo "Starting service: $name $args" - eval "$cmd $args" 2>>/dev/stderr >>"$LOG_DIR/$SERVICE_NAME.log" & - execPid=$! - sleep 10 - checkPID="$(ps ax | awk '{print $1}' | grep -v grep | grep "$execPid$" || false)" - - if [ -n "$execPid" ] && [ -n "$checkPID" ]; then - echo "$execPid" >"$SERVICE_PID_FILE" - echo "$cmd has been started" - return 0 - else - echo "Failed to start $cmd" >&2 - return 1 - fi + local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" + local args="$(eval echo "${EXEC_CMD_ARGS:-}")" + local name="$(basename "$cmd")" + + if [ -z "$cmd" ]; then + echo "Initializing $SCRIPT_NAME has completed" + exit 0 + fi + + if [ ! -x "$cmd" ]; then + echo "$name is not a valid executable" + return 2 + fi + + if __proc_check "$name"; then + echo "$name is already running" >&2 + return 0 + fi + + echo "Starting service: $name $args" + eval "$cmd $args" 2>>/dev/stderr >>"$LOG_DIR/$SERVICE_NAME.log" & + execPid=$! + sleep 10 + checkPID="$(ps ax | awk '{print $1}' | grep -v grep | grep "$execPid$" || false)" + + if [ -n "$execPid" ] && [ -n "$checkPID" ]; then + echo "$execPid" >"$SERVICE_PID_FILE" + echo "$cmd has been started" + return 0 + else + echo "Failed to start $cmd" >&2 + return 1 + fi } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __run_start_script errorCode=$? if [ -n "$EXEC_CMD_BIN" ]; then - if [ "$errorCode" -eq 0 ]; then - SERVICE_EXIT_CODE=0 - SERVICE_IS_RUNNING="yes" - else - SERVICE_EXIT_CODE=$errorCode - SERVICE_IS_RUNNING="no" - [ -s "$SERVICE_PID_FILE" ] || rm -Rf "$SERVICE_PID_FILE" - fi + if [ "$errorCode" -eq 0 ]; then + SERVICE_EXIT_CODE=0 + SERVICE_IS_RUNNING="yes" + else + SERVICE_EXIT_CODE=$errorCode + SERVICE_IS_RUNNING="no" + [ -s "$SERVICE_PID_FILE" ] || rm -Rf "$SERVICE_PID_FILE" + fi fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - echo "Initializing of $SERVICE_NAME has completed with statusCode: $SERVICE_EXIT_CODE" -exit $SERVICE_EXIT_CODE \ No newline at end of file +__script_exit $SERVICE_EXIT_CODE