Files
glassminers-server-docker/scripts/server_script.sh

81 lines
2.0 KiB
Bash

#!/bin/bash
MAX_LOGS=${MAX_LOGS:-20}
LOG_DIR=${LOG_DIR:-"/var/log/glassminers"}
LOG_DATE_FORMAT=${LOG_DATE_FORMAT:-"%Y-%m-%d-%H-%M-%S"}
WATCHDOG_ENABLED=${WATCHDOG_ENABLED:-false}
MAX_RETRIES=${MAX_RETRIES:-10}
mkdir -p "$LOG_DIR"
delete_old_logs() {
if [ -d "$LOG_DIR" ]; then
NUM_LOGS=$(ls -1q "$LOG_DIR"/*.log 2>/dev/null | wc -l)
if ((NUM_LOGS > MAX_LOGS)); then
OLDEST_LOGS=$(ls -1t "$LOG_DIR"/*.log | tail -n $((NUM_LOGS - MAX_LOGS)))
for log_file in $OLDEST_LOGS; do
rm "$log_file"
echo "[Info] Removed old log: $log_file"
done
fi
fi
}
rename_log() {
if [ -f "$LOG_DIR/latest.log" ]; then
STOP_TIMESTAMP=$(date +"$LOG_DATE_FORMAT")
mv "$LOG_DIR/latest.log" "$LOG_DIR/$STOP_TIMESTAMP.log"
echo "[Info] Renamed latest.log to $STOP_TIMESTAMP.log"
else
echo "[Warning] No latest.log file to rename"
fi
}
clean_up() {
rename_log
delete_old_logs
}
trap 'clean_up; shutdown_requested=true; kill -TERM $SERVER_PID' SIGTERM SIGINT
echo "[Info] Max number of logs set to $MAX_LOGS"
echo "[Info] Watchdog enabled: $WATCHDOG_ENABLED"
echo "[Info] Max retries: $MAX_RETRIES"
shutdown_requested=false
retry_count=0
while true; do
TIMESTAMP=$(date +"$LOG_DATE_FORMAT")
echo "[Info] Server is starting at [$TIMESTAMP]"
$EXEC >"$LOG_DIR/latest.log" 2>&1 &
SERVER_PID=$!
wait $SERVER_PID
EXIT_STATUS=$?
echo "[Info] Server stopped at [$(date +"$LOG_DATE_FORMAT")] with exit code: $EXIT_STATUS"
if [ "$shutdown_requested" = true ] || [ $EXIT_STATUS -eq 0 ]; then
break
fi
if [ "$WATCHDOG_ENABLED" = true ]; then
if [ $retry_count -lt $MAX_RETRIES ]; then
retry_count=$((retry_count + 1))
clean_up
echo "[Warning] Watchdog restarting server after crash (attempt $retry_count/$MAX_RETRIES)"
sleep 5
else
echo "[Error] Max retries reached ($MAX_RETRIES). Watchdog stopping."
break
fi
else
break
fi
done
clean_up
echo "[Info] Watchdog script exiting"