My MythTV frontend depends on the masterbackend to be up and running, mainly because some partitions are nfs mounted. So I created a simple script to check if the backend is responding to ping:
#!/bin/bash function isup() { ping -q -n -c1 -w2 BACKEND_IP > /dev/null if [[ $? != 0 ]]; then sleep 5 isup else echo "is up" fi } isup
But there is a small problem with this approach: the backend starts replying to ping long before nfsd and mythbackend are ready.
So instead of using ping, I created a script that checks if mythbackend’s status page (port 6544) is ready, using wget:
#!/bin/bash function isbackendup { wget -q http://BACKEND_IP:6544 -O /dev/null if [[ $? != 0 ]]; then sleep 5 isbackendup else stat_done fi } isbackendup
Finally I wrapped it all up in an ArchLinux rc script, and use WOL to wake the backend:
#!/bin/bash . /etc/rc.conf . /etc/rc.d/functions function isbackendup { wget -q http://BACKEND_IP:6544 -O /dev/null if [[ $? != 0 ]]; then sleep 5 isbackendup else stat_done fi } case "$1" in start) stat_busy "Checking if backend is up..." wol BACKEND_MACADDR > /dev/null isbackendup ;; stop) /bin/true ;; restart) $0 stop sleep 1 $0 start ;; *) echo "usage: $0 {start|stop|restart}" esac
If you run ArchLinux just added it to /etc/rc.conf in the DAEMONS array.
Remember to replace BACKEND_IP and BACKEND_MACADDR with your own values.