123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #!/bin/bash
- # Configurable variables
- SOURCE_FILE=/workspaces/nginx-ui/tmp/main
- TARGET_PATH=/usr/local/bin/nginx-ui
- CONFIG_FILE=/etc/nginx-ui/app.ini
- # init nginx
- ./.devcontainer/init-nginx.sh
- LOG_PREFIX="[Supervisor]"
- # Debug initial state
- echo "$LOG_PREFIX Starting supervisor with:"
- echo "$LOG_PREFIX SOURCE_FILE: $SOURCE_FILE"
- echo "$LOG_PREFIX TARGET_PATH: $TARGET_PATH"
- echo "$LOG_PREFIX CONFIG_FILE: $CONFIG_FILE"
- # Wait for initial file creation
- while [[ ! -f "$SOURCE_FILE" ]]; do
- echo "$LOG_PREFIX Waiting for $SOURCE_FILE to be created..."
- sleep 1
- done
- # Initial copy and start
- echo "$LOG_PREFIX Initial file detected, starting service..."
- cp -fv "$SOURCE_FILE" "$TARGET_PATH"
- chmod +x "$TARGET_PATH"
- pkill -x nginx-ui || echo "$LOG_PREFIX No existing process to kill"
- nohup "$TARGET_PATH" -config "$CONFIG_FILE" > /proc/1/fd/1 2>&1 &
- # Use proper field separation for inotify output
- inotifywait -m -e close_write,moved_to,create,delete \
- --format "%T|%w%f|%e" \
- --timefmt "%F-%H:%M:%S" \
- "$(dirname "$SOURCE_FILE")" |
- while IFS='|' read -r TIME FILE EVENT; do
- echo "$LOG_PREFIX [${TIME}] Event: ${EVENT} - ${FILE}"
-
- # Handle atomic save operations
- if [[ "$FILE" =~ .*-tmp-umask$ ]] || [[ "$EVENT" == "DELETE" ]]; then
- echo "$LOG_PREFIX Detected build intermediate file, checking main..."
- sleep 0.3 # Allow atomic replace completion
-
- if [[ -f "$SOURCE_FILE" ]]; then
- echo "$LOG_PREFIX Valid main file detected after build"
- FILE="$SOURCE_FILE"
- else
- echo "$LOG_PREFIX Main file missing after build operation"
- continue
- fi
- fi
- if [[ "$FILE" == "$SOURCE_FILE" ]]; then
- # Stability checks
- echo "$LOG_PREFIX File metadata:"
- ls -l "$FILE"
- file "$FILE"
-
- # Wait for file stability with retries
- retries=5
- while ((retries-- > 0)); do
- if file "$FILE" | grep -q "executable"; then
- break
- fi
- echo "$LOG_PREFIX Waiting for valid executable (${retries} retries left)..."
- sleep 1
- done
- if ((retries <= 0)); then
- echo "$LOG_PREFIX ERROR: File validation failed after 5 retries"
- continue
- fi
- # Copy and restart service
- echo "$LOG_PREFIX Updating service..."
- cp -fv "$FILE" "$TARGET_PATH"
- chmod +x "$TARGET_PATH"
-
- echo "$LOG_PREFIX Killing existing process..."
- pkill -x nginx-ui || echo "$LOG_PREFIX No process to kill"
-
- echo "$LOG_PREFIX Starting new process..."
- nohup "$TARGET_PATH" -config "$CONFIG_FILE" > /proc/1/fd/1 2>&1 &
- echo "$LOG_PREFIX Restart complete. New PID: $(pgrep nginx-ui)"
- fi
- done
|