Cron 命令不起作用,但在 shell 中起作用

Cron 命令不起作用,但在 shell 中起作用

我设置了一个非常简单的 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”的任何进程

相关内容