Назад | Перейти на главную страницу

Сбой задачи Cron при выполнении определенного задания

На моем сервере я получаю следующую ошибку при запуске одной из моих задач cron:

CRON[9913]: (CRON) error (grandchild #9915 failed with exit status 127)

На сервере работает Ubuntu-1104-natty-64-minimal.

Я использую Всякий раз, когда драгоценный камень вместе с Бэкап гем, хотя в задаче cron, которая завершается неудачей, для записи файла crontab используется только гем "Whe when".

Сценарий задачи cron (для любого случая) выглядит следующим образом:

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

Первоначально при настройке гема всякий раз и резервное копирование я выполнил следующую команду, чтобы заставить их работать правильно:

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. Никакого упоминания о второй (неудачной) задаче / скрипте.

Любая помощь будет оценена по достоинству!

Обычно причиной того, что скрипт работает в вашей учетной записи, но не работает в cron, являются:

  • переменные среды не установлены
  • драгоценные камни, которые не установлены или недоступны пользователю cron
  • отсутствие разрешений или другой начальный путь (домашний) в скрипте.

Я рекомендую вам "su" своему пользователю cron и запустить ваш скрипт, чтобы увидеть, как он не работает.