This is how you setup a babysitter for a service started with system V init scripts using DJB's deamontools. We can't just put service $service start
into a run file, because sys V init scripts start up background daemons. We have to use the daemon's PID file to watch what's going on.
First, I create mysql-babysit. I'm using mysql as an example. For other services, adjust $service
and $pidfile
.
# mkdir /var/daemontools/supervised/mysql-babysit # cd /var/daemontools/supervised/mysql-babysit # cat <<'SH' > mysql-babysit #!/bin/bash service=mysql datadir=/var/lib/mysql pidfile=$datadir/$(hostname).pid ################## sleepPID= function sig_finish () { echo $(date) $service "$1" service $service stop [[ $sleepPID ]] && kill $sleepPID } trap 'sig_finish TERM' TERM trap 'sig_finish KILL' KILL ################## echo $(date) $service start service $service start if [[ -f $pidfile ]] ; then pid=$(< $pidfile) if [[ $pid ]] ; then while grep -q $service /proc/$pid/cmdline 2>/dev/null ; do sleep 60 & sleepPID=$! wait $sleepPID done echo $(date) $service exited exit 0 fi fi echo $(date) $service failed to start sleep 5 exit 3 SH
Next we create and activate the run script
cd /var/daemontools/supervised/mysql-babysit # cat <<'SH' >run #!/bin/bash exec /var/daemontools/supervised/mysql-babysit/mysql-babysit SH # chmod +x run # chkconfig mysql off # service mysql stop # cd ../../service # ln -s ../supervised/mysql-babysit
We can control mysql with
svc -d /var/daemontools/supervised/mysql-babysit # shutdown mysql svc -u /var/daemontools/supervised/mysql-babysit # startup mysql killall mysql # restart mysql
No comments:
Post a Comment