cron 中的 pidof 找不到进程?

pidof in cron not finding process?

如果我的守护进程没有 运行(崩溃等),我想重新启动它。由于各种原因,inittab 不适用。此代码段在 bash 中运行良好,但在 cron 中运行不正常,因为它不断启动多个进程:

*/1 * * * * /bin/bash if [ ! $(pidof vzlogger) ]; then sudo vzlogger -d; fi;

子shell"eating"是pidof的退出代码吗?备选方案

*/1 * * * * /bin/bash if [ -z "$(pidof vzlogger)" ]; then sudo vzlogger -d; fi;

有同样的问题-多进程?

运行 Bash 命令的方式不是 bash commands 而是 bash -c 'commands'.

*/1 * * * * /bin/bash -c 'pidof vzlogger >/dev/null || sudo vzlogger -d'

当然,/1 是多余的,您不需要 Bash。

* * * * * pidof vzlogger >/dev/null || sudo vzlogger -d

if test 本身并没有错,但通常可以避免。因此,例如,pidof 幸运的是 returns 如果没有找到 PID 则出错,否则成功;所以你可以使用快捷语法。 (大多数维护得当的 Unix 工具都有此功能。)因为 PID 不再在(多余的)进程替换中捕获,我们将输出从 pidof 重定向到 /dev/null(否则您将收到来自cron 守护进程每次成功并生成输出)。

/bin/bash if 将在当前目录中搜索名为 if 的文件(对于 cron 作业,该文件是您的主目录),并尝试将其作为 Bash 脚本执行.

您应该已经收到一封来自 cron 守护程序的电子邮件,其中包含一条错误消息:

bash: if: No such file or directory