In production sites, we normally need to ensure that everything must go fine. However, in many cases, some server services are terminated which causes your website broken/died. For example, sometimes hhvm goes down in my production server which cause my commercial system stop working. This is hurt and it affects directly to my pocket :-(. So, I must think a way to monitor a service periodly and restart it if it is broken. In this short tutorial, I will guide how to write a bash script to check if a service is running.
First, create the following bash script, name it script_check_hhvm.sh for example:
logfile="/var/log/hhvmcheck.log" case "$(pidof hhvm | wc -w)" in 0) echo "hhvm not running, restarting oscam1: $(date)" >> $logfile service hhvm start ;; 1) ;; *) echo "multiple instances of hhvm running. Stopping & restarting hhvm: $(date)" >> $logfile service hhvm restart ;; esac
In the above script, if hhvm is stopped, there is no hhvm process and we will start it by service hhvm start command. When there is more than 1 hhvm process, it means that there is some problem in our system and we will restart it.
Then, setup it as a cron run every 2 minutes via crontab:
crontab -e */2 * * * * sh /root/script_check_hhvm.sh
It’s all! You can easily replace the command actions for your cases with the above script and enjoy it 🙂