Crontab 条目不起作用

Crontab 条目不起作用

我在 crontab 中有这个。(在 /etc 中)

我以 root 身份编辑了该文件。

脚本在独立运行时可以正常工作,但在 crontab 中则不行。

@daily          root    /home/andy/bin/Backup_18_04.sh

答案1

要确定 crontab 中的某些脚本是否有问题,我们必须使用以下命令检查系统日志

less -S /var/log/syslog

并查找 CRON 行并搜索相关的错误消息。

简化此分析的另一种方法是在 cron 定义中添加一个明确的日志文件,如下所示:

@daily root /home/andy/bin/Backup_18_04.sh >/home/andy/backup.log 2>&1

> 符号将脚本的所有输出重定向到文件,而 2>&1 将所有错误消息重定向到相同的已重定向的输出文件(1 是内部描述符,默认情况下所有程序都会发送正常消息,而 2 则表示错误,因此 2>&1 导致“通道”2 连接到“通道”1 的副本)。重要提示:行定义必须以换行符结束。

我更喜欢使用通过 配置的常规 CRON 系统crontab -e;它看起来很复杂,只是因为它具有很大的灵活性。例如,你可以使用以下命令每天凌晨 3:25 触发脚本:

#MINUTE HOUR DAYOFMONTH MONTH DAYOFWEEK COMMAND
 25     3    *          *     *         /home/andy/bin/Backup_18_04.sh >/home/andy/backup.log 2>&1

星号表示每个字段的“全部”,因此 '所有月份的所有天,每周的任何一天的 3 点 25 分' cron 执行脚本并将其正常和错误消息(如果有)保存在文件中/home/andy/backup.log

您使用的词@daily相当于0 0 * * *每天凌晨 0:00。

除此之外,时间指示后的用户名仅在 /etc/crontab 中使用,而不是在使用 crontab -e 创建的脚本中使用(因为默认情况下用户是创建者)。

另外两个重要方面是将脚本声明为可执行文件并指示哪个 shell 解释器将处理它。使用以下命令可以轻松使脚本可执行:

chmod a+x /home/andy/Backup_18_04.sh

为了指示 shell 解释器,脚本的第一行应该包含符号井号/感叹号#!和所需的 shell 路径(这称为“shebang”),例如:

 #!/bin/bash

这将导致脚本被 Bash shell 解释器处理。

有关 crontab 行格式的更多信息,请使用以下命令阅读相应的手册:

man 5 crontab

相关内容