cron中的pidof没有找到进程?

时间:2015-03-31 10:52:58

标签: bash cron

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

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

子shell是否“吃掉”pidof的退出代码?替代

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

有同样的问题 - 多个过程?

1 个答案:

答案 0 :(得分:0)

运行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幸运的是,如果找不到PID则会返回错误,否则会成功;所以你可以使用快捷语法。 (大多数维护得当的Unix工具都具有此功能。)由于不再在(多余的)流程替换中捕获PID,因此我们将输出从pidof重定向到/dev/null(因为否则您将收到来自cron守护进程每次成功并生成输出)。

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

您应该已收到来自cron守护程序的电子邮件,并显示错误消息:

bash: if: No such file or directory