我设置了一个非常简单的 cronjob,以确保脚本持续运行,如果脚本出现故障,会通过电子邮件通知我(我知道这技术含量不高,但这只是一种快速修复方法)
不幸的是,这个 cronjob 没有发挥作用
以下是我的 crontab 中的相关行:
* * * * * pgrep -f app.py || echo "Your app is down" | mail -s "URGENT" [email protected]
当我在 shell 中运行该命令时,它起作用了:只有当应用程序关闭时,我才会收到电子邮件。作为一个次要的副作用,当应用程序是运行时,它将PID输出到屏幕。
当我通过 cronjob 运行命令时,我从未收到任何电子邮件。调查(通过设置参数MAILTO=
来查看 cronjob 输出)我注意到,当应用程序运行时,它会输出二PID,当应用程序未运行时,它会输出一个 PID(永远不会为零,因此它永远不会发送电子邮件)
这几乎就像 cronjob 正在启动一个进程,而这个进程又可以被它自己看到——就像输入ps -ax | grep "anything"
总是会返回一样:
12345 pts/2 S+ 0:00 grep --color=auto anything
有谁知道如何修复这个 cronjob 吗?
答案1
对于将来遇到此问题的人来说,解决方案相当简单:
跑步时
pgrep -f "anything"
在 cronjob 中,它将返回由 cron 生成的 bash shell 的进程。
相反,我不得不使用
ps -ax | grep "anything" | grep -v grep
搜索正在运行的进程并同时删除名称中包含“grep”的任何进程