Я решил эту проблему с помощью ps-watcher и написал об этом на linux.com несколько лет назад. ps-watcher позволяет вам отслеживать процессы и уничтожать их в зависимости от накопленного времени выполнения. Вот соответствующая конфигурация ps-watcher, предполагая, что ваш процесс называется 'foo':
[foo]
occurs = every
trigger = elapsed2secs('$time') > 1*HOURS && $ppid != 1
action = <<EOT
echo "$command accumulated too much CPU time" | /bin/mail user\@host
kill -TERM $pid
EOT
[foo?]
occurs = none
action = /usr/local/etc/foo restart
Ключ это линия
trigger = elapsed2secs('$time') > 1*HOURS && $ppid != 1`
который говорит: «если накопленное время процесса> 1 часа И я не родительский процесс, перезапустите меня.
Итак, я понимаю, что в ответе не используется monit, но он работает. ps-watcher легок и прост в настройке, так что нет ничего плохого в том, чтобы запускать его в дополнение к настройке вашего монитора.