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
如果我的守护进程没有 运行(崩溃等),我想重新启动它。由于各种原因,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