操作系统: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 并未按预期运行。当我删除并复制相同的文件时,它工作正常..只需尝试相同的..
但是,当我尝试覆盖该文件时,我不明白它不起作用的原因。