有一个 cron 作业设置了,它运行了一整天,有时作业会卡住,我想设置一个时间或检查它,让我知道它是否卡住了 20 分钟以上,我想知道如何做到这一点。最后,如果它确实花费了 20 分钟以上,我希望它给我们发送电子邮件。这是我的 crontab 条目:
00 07 * * * /u01/home/oracle/sysadm/run_trans_push.sh > /u01/home/oracle/trc/run_trans_push.sh_`date +\%b_\%d`.trc 2>&1
这也会创建一个跟踪文件。
答案1
您可以尝试以下操作:在作业开始前创建一个文件,并在作业完成后将其删除。作业开始 20 分钟后检查该文件是否存在。如果存在,则发送通知
00 07 * * * touch /tmp/run_trans_push.started; /u01/home/oracle/sysadm/run_trans_push.sh > /u01/home/oracle/trc/run_trans_push.sh_`date +\%b_\%d`.trc 2>&1; rm -f /tmp/run_trans_push.started 20 07 * * * 如果 [ -f /tmp/run_trans_push.started ]; 然后 echo "run_trans_push 仍在运行"; fi
据我所知,如果有输出,cron 会向 cron 作业的用户发送一封邮件。所以我认为这样做echo
就足够了。但当然你可以发送邮件,例如:
mailx -s 'run_trans_push still running' oracle </dev/null