我pipe理的一个Ubuntu 10.10 Web服务器有一个严重的问题。
我使用ruby和rake编写了一个脚本来运行一些tar命令并执行数据库的mysqldump。 我已经在root用户crontab中安装了一个条目,如下所示:
0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything'
这在其中一台服务器上是完美的。 然而另一方面,这似乎并没有执行我脚本中的内容。
我知道这是要求确定,因为当我跑步
grep CRON /var/log/syslog
它返回:
Mar 22 12:00:01 ServerName CRON[10273]: (root) CMD (/bin/bash -l -c 'cd /my/script/path && rake backup:everything')
但是,这绝对不是在做什么脚本。
当我直接运行这样的脚本:
cd /my/script/path && sudo rake backup:everything
它完美的作品。
另外我在两台服务器的crontab中都这样做了:
0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'
(就像在脚本中我每隔一段时间一次“放置”备份x文件夹一样)
在cron作业正在工作的服务器上,它会创buildoutput.txt文件,并将预期的输出放在那里,比如“开始备份”等。
但是,在服务器上它不工作,它只创build该文件,但留空。 但是当我再次从syslog复制命令并手动运行它时:
sudo /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'
它工作正常,输出如预期。
我现在可能正在抓着稻草,但是这可能与此有什么关系:
CRON[10271]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)
这在每个 cron调用之后都会出现在syslog中。 我只是真的有这个cron工作,另一个小的更新系统时钟,但从它的外观没有一个正常工作。
是一个不正确的邮件configuration杀死我的cron作业? 这甚至可能吗?
你应该在cron行中提供rake的完整path。 就像是:
/sbin/rake或其实际存在的地方。
如果耙入的path不在你的根用户path中,将无法运行。
如果是邮件,你应该在邮件日志中看到一些东西。 在那里检查。
当你处理cron的时候总是考虑环境variables。 你最好运行input环境variables(源)的bash脚本并运行你的命令。