На моем сервере я получаю следующую ошибку при запуске одной из моих задач 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, являются:
Я рекомендую вам "su" своему пользователю cron и запустить ваш скрипт, чтобы увидеть, как он не работает.