为什么 cron 不自动运行?

为什么 cron 不自动运行?

操作系统:Ubuntu 12.04

现在我想用备份每当gem 自动备份我的数据库。当我通过 ssh 连接服务器作为添加的用户运行时备份执行 -t my_backup,它运行良好。但是 cron 文件:

0 22 * * * /bin/bash -l -c 'backup perform -t my_backup'

22:00不能运行。当我使用猫 /etc/crontab检查cron的配置文件,它是:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

/bin/bash/bin/sh不一样,是什么原因?怎么办?

答案1

特殊的 crontab 文件 /etc/crontab 的格式略有不同,其中第六个字段必须是运行 cron 作业的用户。因此,如果要将作业放入该文件中,则必须在 * 和 /bin/bash 之间插入用户名以匹配格式。就像是:

0 22 * * * root /bin/bash -l -c 'backup perform -t my_backup'

将 root 替换为您真正想要使用的任何用户名。

答案2

尝试使用要执行的备份命令构建一个脚本,然后在 crontab 中调用它,如下所示:

0 22 * * * (cd <absolute-path-of-directory> && ./script.sh >>script.log 2>&1)

在这个脚本中,我首先推荐一行

#!/bin/bash
echo "`date '+%Y%m%d %H%M%S':`: $0 started"

所以你可以看到 cron 正在执行它并专注于命令。通常执行良好的脚本无法在 cron 下运行的原因通常可以在 cron 下使用的不同环境中找到。

答案3

几周前我也经历过同样的事情。我试图复制并覆盖 crontab 文件。尽管所有参数都正确,但 cron 并未按预期运行。当我删除并复制相同的文件时,它工作正常..只需尝试相同的..

但是,当我尝试覆盖该文件时,我不明白它不起作用的原因。

相关内容