Skip to content

Instantly share code, notes, and snippets.

@LadyNamedLaura
Created April 28, 2013 11:35
Show Gist options
  • Save LadyNamedLaura/5476637 to your computer and use it in GitHub Desktop.
Save LadyNamedLaura/5476637 to your computer and use it in GitHub Desktop.
script to monitor and respawn a server
#!/bin/bash
PROGNAME=$0
usage() {
cat <<EOF
usage: $PROGNAME [-n|--name SERVERNAME] [-d|--dir SERVERDIR] cmd [args]
-n, --name name under which the server is logged.
-d, --dir directory with server data
EOF
exit $1
}
log() {
echo "[SCRIPT][$(date)]" $@ | tee "server.log"
}
SERVERNAME=
SERVERDIR="$(pwd)"
# Execute getopt
ARGS=$(getopt -o "d:n:h" -l "dir:,name:,help" -n "getopt.sh" -- "$@")
#Bad arguments
if [ $? -ne 0 ]
then
usage 1
fi
set -- "$ARGS"
while true
do
case "$1" in
-d|--dir)
SERVERDIR="$2"
shift 2
;;
-n|--name)
SERVERNAME="$2"
shift 2
;;
-h|--help)
usage 0
;;
--)
shift
break;
;;
esac
done
SERVER=$@
if [ -n "$SERVERNAME"]
then
SERVERNAME="$server"
fi
cd $(SERVERDIR)
while true
do
PID=$(cat .pid)
if ![ -d "/proc/$PID"]
then
log "spawning server"
$SERVER &
PID=$!
echo $PID > .pid
log "spawned server with pid=$PID"
fi
wait $PID
RET=$?
mkdir -p "serverlogs"
if [ $RET = 0 ]
then
mv "server.log" "serverlogs/server.log.$(date +%Y-%m-%d":"%H:%M)"
log "gracefull exit, not respawning"
rm .pid
exit 0
fi
log "server exited with code $RET, backing up logs and respawning"
mv "server.log" "serverlogs/[ERROR]server.log.$(date +%Y-%m-%d":"%H:%M)"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment