author "Clint Byrum " description "Waiting for state" task normal exit 2 stop on started $WAIT_FOR or stopped $WAIT_FOR # These are all arguments for use influencing how this job waits env TIMEOUT=30 env MANUAL_OVERRIDE="N" env WAIT_FOREVER="N" env WAIT_STATE="started" env TARGET_GOAL="start" # Required args w/ no sensible default, the tests at the beginning of # the script are just to guard against WAITER="" or WAIT_FOR="", as the # instance line will fail if they are not set, since they have no env instance $WAITER$WAIT_FOR script test -n "$WAIT_FOR" || exit 1 test -n "$WAITER" || exit 1 # We don't want to override the manual stanza # XXX: initctl show-config should share manual w/ us too case $MANUAL_OVERRIDE in N|n|0) if grep -q "^\s*manual\s*$" /etc/init/$WAIT_FOR.conf ; then exit 0 fi ;; esac if [ "$WAIT_STATE" = "stopped" ] ; then TARGET_GOAL="stop" fi # Already running/stopped? status $WAIT_FOR | grep -q "$TARGET_GOAL/$WAIT_STATE" && exit 0 # Give it a push $TARGET_GOAL $WAIT_FOR || : # upstart will kill this shell on started/stopped $WAIT_FOR while sleep $TIMEOUT ; do case $WAIT_FOREVER in N|n|0) exit 100 ;; Y|y|1) ;; *) exit 1 ;; esac done # Very strange, sleep returned non-zero? exit 1 end script