#!/bin/zsh zmodload zsh/datetime setopt extendedglob : ${SVDIR:=${1:-/run/service}} export SVDIR zsvgen --all-up check_runsv() { while (($#)); do [[ -a $1/supervise/control ]] || return $? shift done } START=$EPOCHREALTIME services_pre='' services=( ${SVDIR}/*/run(-*) ); services=( $services:h ) while [[ ${(F)services} != $services_pre ]]; do while (( $EPOCHREALTIME - $START < 10 )); do check_runsv $services && break if (($+commands[inotifywait])); then inotifywait -r -q -t 1 -e create,move,close_write $services else sleep 0.2 fi done sv check $services services_pre="${(F)services}" services=( ${SVDIR}/*/run(-*) ); services=( $services:h ) done