diff --git a/auto-restart-qortal.sh b/auto-restart-qortal.sh new file mode 100755 index 0000000..e189e1c --- /dev/null +++ b/auto-restart-qortal.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Usage: ./auto-restart-qortal.sh [restart_interval_hours] + +# Check if restart interval is provided +if [ -z "$1" ]; then + RESTART_INTERVAL_HOURS=6 + log "restart interval is set to: '$RESTART_INTERVAL_HOURS hours'" + echo "No restart interval provided. Using default: $RESTART_INTERVAL_HOURS hours" +else + RESTART_INTERVAL_HOURS=$1 +fi + +QORTAL_DIR="$HOME/qortal" # Default path to Qortal directory +LOG_FILE="$QORTAL_DIR/auto_restart_log.txt" + +# Check if screen exists +if command -v screen &> /dev/null; then + USE_SCREEN=true +else + USE_SCREEN=false +fi + +# Log function +log() { + if [ -n "$LOG_FILE" ]; then + echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" + else + echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" + fi +} + +# Function to restart Qortal +restart_qortal() { + log "Restarting Qortal..." + cd "$QORTAL_DIR" || { + log "Failed to change directory to $QORTAL_DIR" + exit 1 + } + ./stop.sh + sleep 60 + ./start.sh + log "Qortal restarted." +} + +# Main loop function +main_loop() { + log "Restart interval set to: $RESTART_INTERVAL_HOURS hours" + while true; do + restart_qortal + sleep $((RESTART_INTERVAL_HOURS * 3600)) # Convert hours to seconds and wait + done +} + +# Run the script in a screen session if available +if [ "$USE_SCREEN" = true ]; then + if screen -list | grep -q "auto_restart_monitor"; then + log "Screen session 'auto_restart_monitor' already exists. Attaching to existing session." + screen -x auto_restart_monitor + else + screen -dmS auto_restart_monitor bash -c "$(declare -f log restart_qortal main_loop); RESTART_INTERVAL_HOURS=$RESTART_INTERVAL_HOURS; QORTAL_DIR=$QORTAL_DIR; LOG_FILE=$LOG_FILE; main_loop" + log "Started in a new screen session." + fi +else + log "Screen not found. Running in the current session." + main_loop +fi +