我在 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