Skip to content

Instantly share code, notes, and snippets.

@synaptiko
Created June 9, 2013 19:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save synaptiko/5744871 to your computer and use it in GitHub Desktop.
Save synaptiko/5744871 to your computer and use it in GitHub Desktop.
Bash shell script which let run PROCESS_COMMAND forever until daemon is called with kill parameter.
#!/usr/bin/env bash
SCRIPT_PATH=$(readlink -f $0)
DIR=$(dirname $SCRIPT_PATH)
PID_DIR="${DIR}/pid"
LOG_DIR="${DIR}/log"
DAEMON_PID_FILE="${PID_DIR}/daemon.pid"
DAEMON_LOG_FILE="${LOG_DIR}/daemon.log"
PROCESS_PID_FILE="${PID_DIR}/process.pid"
PROCESS_LOG_FILE="${LOG_DIR}/process.log"
# Set here whatever you want to run forever!
PROCESS_COMMAND="${DIR}/index.js"
log() {
DATE=`date +"%Y-%m-%d %H:%M:%S"`
echo "${DATE} $1" >> $DAEMON_LOG_FILE
}
start() {
touch $PROCESS_PID_FILE
nohup $PROCESS_COMMAND &>>$PROCESS_LOG_FILE &
echo $! > $PROCESS_PID_FILE
PID=$(cat $PROCESS_PID_FILE)
log "Process started with $PID"
}
keep_alive() {
if [ -f $PROCESS_PID_FILE ]
then
PID=$(cat $PROCESS_PID_FILE)
if [ $(ps -Ao pid | grep $PID) ]
then
return
else
start
fi
else
start
fi
}
stop() {
if [ -f $PROCESS_PID_FILE ]
then
PID=$(cat $PROCESS_PID_FILE)
if [ $(ps -Ao pid | grep $PID) ]
then
kill -TERM $PID
fi
rm $PROCESS_PID_FILE
fi
}
start_daemon() {
log "Starting daemon"
touch $DAEMON_PID_FILE
echo $$ > $DAEMON_PID_FILE
trap stop_daemon INT SIGINT TERM SIGTERM
keep_alive
while true
do
keep_alive
wait
sleep 1
done
}
stop_daemon() {
log "Stopping daemon"
stop
rm $DAEMON_PID_FILE
log "Daemon stopped"
exit 0
}
if [ ! -d $PID_DIR ]
then
mkdir $PID_DIR
fi
if [ ! -d $LOG_DIR ]
then
mkdir $LOG_DIR
fi
if [ -f $DAEMON_PID_FILE ]
then
PID=$(cat $DAEMON_PID_FILE)
if [ $(ps -Ao pid | grep $PID) ]
then
if [ "$1" = "kill" ]
then
kill -TERM $PID
echo "Daemon is killed"
else
echo "Daemon is running with PID $PID"
fi
exit 0
fi
fi
if [ "$1" = "daemon" ]
then
start_daemon
fi
if [ "$1" != "kill" ]
then
nohup "$0" daemon &> /dev/null &
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment