Cron 任务在特定作业上失败

Cron 任务在特定作业上失败

在我的服务器上运行其中一个 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 用户并运行您的脚本来查看它是如何失败的。

相关内容