如果它没有运行(崩溃等),我想重启我的守护进程。 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;
有同样的问题 - 多个过程?
答案 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