在我的服务器上运行其中一个 cron 任务时出现以下错误:
CRON[9913]: (CRON) error (grandchild #9915 failed with exit status 127)
服务器正在运行 Ubuntu-1104-natty-64-minimal。
我正在使用每当宝石随着备份宝石,尽管失败的 cron 任务仅使用 Everywhere gem 来写入 crontab 文件。
cron任务脚本(用于Whenever)如下:
set :output, "#{path}/log/cron.log"
every 2.minutes do
command "cd /var/www/outofhours && /usr/local/bin/rake fetch_incomingcalls RAILS_ENV=production"
end
every 1.day, :at => '11:05am' do
command "cd ~/ && ./import_premvet.sh"
end
在上面的脚本中,第一个脚本(每 2.分钟执行一次)运行正常。然而,第二个脚本(每 1.天执行一次)却失败并出现错误。
它应该运行的脚本是:
#!/bin/sh
# Untar premvet_sync database and dump into local mysql server.
echo "Finding latest backup directory"
dir=$(ls -td1 /root/backups/premvet_sync/* | head -1)
echo "Opening latest backup directory"
cd $dir
echo "Latest: $dir"
echo "Uncompress premvet_sync.tar"
tar -xvf premvet_sync.tar
echo "Dig down into correct directory"
cd $dir/premvet_sync/databases/MySQL
echo "mysqldump the compressed database file"
gunzip < premvet.sql.gz | mysql -u root -pPASSWORD premvet
echo "Done."
上述脚本的权限设置为:
-rwxrwxrwx 1 root root 510 2012-07-23 11:31 import_premvet.sh
我也尝试将上述脚本的第一行更改为:
#!/usr/local/bin/sh
最初配置 Whatever It Takes a 和 Backup gem 时,我运行了以下命令来使它们正常工作:
sudo ln -s /usr/local/bin/ruby /usr/bin/.
值得注意的是,以 root 身份登录时直接运行脚本即可成功。
Cron日志
以下是该任务在我的 crontab -e 视图中的显示方式:
2 13 * * * /bin/bash -l -c 'cd ~/ && ./import_premvet.sh &>/tmp/cronjob.log >> /var/www/outofhours/log/cron.log 2>&1'
运行 tail -f /tmp/cronjob.log 时我得到:
tail: cannot open `/tmp/cronjob.log' for reading: No such file or directory
#{path}/log/cron.log 的内容为:
Scraping Calls
这是第一个 cron 任务的成功消息。没有提及第二个(失败的)任务/脚本。
任何帮助,将不胜感激!
答案1
通常,脚本在您的帐户中运行但在 cron 中失败的原因是:
- 未设置环境变量
- cron 用户未安装或无法访问 gem
- 脚本中缺少权限或不同的起始路径(home)。
我建议您“su”到您的 cron 用户并运行您的脚本来查看它是如何失败的。