#!/bin/sh nm=$1 getpid() { initctl status "$1" |awk '/PID :/{ print $3; }' } pid=$(getpid "$nm") if [ -f oldpid ]; then oldpid=$(cat oldpid) if [ "$oldpid" = "$pid" ]; then echo "Looks bad, wait for it ..." sleep 3 pid=$(getpid "$nm") if [ "$oldpid" = "$pid" ]; then echo "Finit did not deregister old PID $oldpid vs $pid" initctl status "$nm" ps echo "Reloading finit ..." initctl reload sleep 1 initctl status "$nm" exit 1 fi fi fi timeout=50 while [ "$pid" -le 1 ]; do sleep 0.1 # Once Finit gives up on a service it forks the post:script and # reports that PID as the service's, so a slay still waiting for # the service to come back would kill the script instead. st=$(initctl -p status "$nm" 2>/dev/null | awk '/Status/{print $3}') if [ "$st" = "crashed" ]; then exit 1 fi pid=$(getpid "$nm") if [ "$pid" -le 1 ]; then timeout=$((timeout - 1)) if [ "$timeout" -gt 0 ]; then continue fi if [ $pid -ne 0 ]; then echo "Got a bad PID: $pid, aborting ..." ps sleep 1 initctl status "$nm" ps fi exit 1 fi break done echo "$pid" > /tmp/oldpid #echo "PID $pid, kill -9 ..." kill -9 "$pid" 2>/dev/null || true