há uma variável de ambiente MONIT_PROCESS_PID propagada no contexto do programa executado pelo comando exec.
if uptime > 4 hours then stop
deve ser substituído por
if uptime > 4 hours then exec "/usr/bin/monit-kill-process.sh"
e o /usr/bin/monit-kill-process.sh deve ser parecido com
#!/bin/bash
# script run from monit instance
# this will find long-running surefire process and kill it
kill -9 $MONIT_PROCESS_PID
O único problema é que o monit não é a ferramenta certa para este trabalho, pois ele quer que o processo que corresponde ao padrão check seja encontrado toda vez que ele executa a verificação, caso contrário ele tenta iniciar o processo usando start parte da definição de verificação (que não é exatamente o que queremos fazer).
Então eu encontrei e modifiquei este ps / grep / perl / xargs oneliner que eu corro através do cron. É capaz de encontrar processos por sua substring de linha de comando, selecionar os de longa duração e tratá-los bem.
#!/bin/bash
# script run from monit instance
# this will find long-running surefire process and kill it
readonly PROCESS_STRING="surefireboot"
/bin/ps -e -o pid,time,command \
| /bin/grep $PROCESS_STRING \
| /usr/bin/perl -ne 'print "$1 " if /^\s*([0-9]+) ([-0-9]+:[0-9]+:[0-9]+)/ && $2 gt "04:00:00"' \
| /usr/bin/xargs kill