为什么crontab脚本不起作用?

亚当·马坦(Adam Matan)|

通常,crontab脚本未按计划执行或未按预期执行。这样做的原因有很多:

  1. 错误的crontab表示法
  2. 权限问题
  3. 环境变量

该社区Wiki旨在汇总crontab未按预期执行脚本的主要原因将每个原因写在单独的答案中。

请为每个答案提供一个原因-未执行原因的详细信息-并出于该原因进行修复。

请仅编写特定于cron的问题,例如,命令会在shell中按预期执行,但cron错误地执行。

盖尔哈

不同的环境

Cron将最少的环境变量集传递给您的工作。要查看差异,请添加一个虚拟作业,如下所示:

* * * * * env> /tmp/env.output

等待/tmp/env.output创建,然后再次删除作业。现在,将您的内容/tmp/env.outputenv常规终端run的输出进行比较

这里常见的“陷阱”是PATH环境变量不同。也许你的cron脚本使用命令somecommand中发现/opt/someApp/bin,你已经加入PATH/etc/environmentcron会PATH从该文件中忽略,因此somecommand使用cron运行时从脚本运行将失败,但是在终端中运行时可以运行。值得注意的是,from的变量/etc/environment将传递给cron作业,而不是cron专门设置的变量,例如PATH

为了解决这个问题,只需PATH在脚本顶部设置您自己的变量。例如

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# rest of script follows

有些人更喜欢只使用绝对路径访问所有命令。我建议反对。考虑如果要在另一个系统上运行脚本,并且在该系统上运行命令,会发生什么情况/opt/someAppv2.2/bin您必须将整个脚本替换为/opt/someApp/bin/opt/someAppv2.2/bin而不仅仅是在脚本的第一行进行少量编辑。

您还可以在crontab文件中设置PATH变量,该变量将应用于所有cron作业。例如

PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

15 1 * * * backupscript --incremental /home /root

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章