我遇到了一个奇怪的问题。我编写了一个 bash 脚本来获取应用程序的状态。当我从 shell 执行脚本时,脚本运行良好,但当我尝试从 crontab 执行同一脚本时,它不起作用。不知道这里发生了什么...
手动和 cron 都是从 root 帐户运行。
答案1
这通常是因为 cron 启用 PATH 的方式与 shell 不同。尝试在提示符下输入“echo $PATH”。获取生成的 PATH 字符串并将其作为 PATH= 添加到 crontab 文件的顶部。这可能会修复此问题。
标记
答案2
Root 可能会收到一封解释错误的电子邮件。请检查 root 的邮件,或者将其设置MAILTO
为文件顶部的其他地址。
除了可能存在不同的 PATH 之外,请注意,crontab
有一些略显奇怪的转义规则。特别是,%
变为换行符,而第一个字符之后的字符%
变为命令的标准输入。
答案3
@mfarver 已经回答了,我只想补充一点:
启动时运行的任何脚本都不会设置 PATH 环境变量。除非您导出 PATH,否则您必须使用完整路径调用所有命令。任何时候创建一个,只需export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
在开头添加,就应该没问题。当然,如果您需要该路径中的其他文件夹,请将它们添加到那里。我不想把这个作为答案,因为 @mfarver 已经有了正确的答案,但我没有足够的积分来添加评论 :)。