Как сделать сторожевой таймер сценария оболочки для проверки работоспособности другой программы или оборудования?
Мне нужен простой скрипт для сброса периферийного MCU. Моя потребность - это петля, которая должна быть проверена последней. В случае отсутствия пинга в течение 2 минут запускается скрипт reset-mcu.
Я нашел небольшой пример, чтобы начать здесь: Как мне написать сторожевой демон в Bash? и мой код, кажется, работает. Периферийное устройство может запустить команду оболочки.
#!/bin/sh
PIDFILE=~/.wd.pid
if [ x"$1" = x-daemon ]; then
# logger "command daemon"
sleep 1
if test -f "$PIDFILE"; then
logger "${$} do ping n exit $PIDFILE"
kill -s SIGUSR1 `cat "$PIDFILE"`
exit
fi
echo $$ > "$PIDFILE"
trap "rm '$PIDFILE'; logger '"${$}" see you 1'; exit" SIGTERM SIGINT
# trap "logger '${$} start n stop $PIDFILE'; '$0' ; kill `cat "$PIDFILE"`; exit" SIGUSR1 SIGINT
trap "logger '${$} start n stop $PIDFILE'; '$0' ; rm '$PIDFILE'; logger '"${$}" see you 2'; exit" SIGUSR1 SIGINT
# trap "logger 'see you'; exit" EXIT
while true; do
#launch your app here
logger "hello ${$}"
sleep 120 &
wait # needed for trap to work
logger "DO NOT DISPLAY THAT" #timeout wd : this command will be replaced by reset-mcu
done
elif [ x"$1" = x-stop ]; then
logger "${$} command stop $PIDFILE"
kill `cat "$PIDFILE"`
elif [ x"$1" = x-ping ]; then
logger "${$} command ping $PIDFILE"
kill -s SIGUSR1 `cat "$PIDFILE"`
else
# logger "command other"
"$0" -daemon &
fi
Мой вопрос: что вы думаете об этом стиле кодирования? Интересно, смогу ли я использовать меньше процесса?