Crontab со скриптом Ruby возвращает код ошибки 1
Я переписываю некоторые скрипты оболочки в Ruby, которые будут использоваться для резервного копирования определенного контента с нашего сайта. Я использую Ruby 1.8.7 и у меня есть скрипт, работающий локально от имени root, и он отлично работает.
Я только что попытался добавить скрипт в cronttab на Ubuntu 11.10.
*/5 * * * * ruby /root/code/backup_images.rb local
При запуске cron я получаю следующую ошибку в системном журнале:
Mar 21 16:15:01 ubuntu CRON[4942]: (root) CMD (ruby /root/code/backup_images.rb local)
Mar 21 16:15:02 ubuntu CRON[4941]: (CRON) error (grandchild #4942 failed with exit status 1)
Я пробовал следующие решения, но безрезультатно:
env -i $SHELL --norc
Который предположительно создает новую голую оболочку, которая имитирует то, что запускает crontab, и это прекрасно работает с моим сценарием.
#!/usr/bin/env ruby
Я добавил Это объявление в верхнюю часть моего скрипта, который не изменил функциональность при запуске его вручную и не решил проблему с crontab.
Я даже пытался вывести результаты вызова в файл, однако это только создает новый файл, в котором ничего нет.
Я не уверен, что еще может быть проблемой, но я предполагаю, что это должно быть что-то с Кроном, не способным найти Руби или что-то в этом роде. Я довольно новичок в этом, так что я здесь в тупике.
Заранее спасибо!
2 ответа:
Я считаю, что ошибка заключается в том, что вам нужно применить путь к ruby в вашем crontab
Но лично я предпочитаю просто указать путь к исполняемому файлу ruby.
*/5 * * * * /root / code/backup_images.rb local
, а затем добавить
#!/usr / bin / ruby
к началу backup_images.rbТакже нужно сделать файл исполняемым с Рубином chmod +x
Итак, с помощью @tomodachi я пошел еще дальше и явно написал следующую строку crontab, и теперь она работает.
*/15 * * * * cd /root/code/ && ./backup_images.rb local > /root/code/log/script.log
Поэтому в основном я пытался выполнить команду из оболочки bash, и она не находила сценарий. Поэтому я явно иду в директ, а затем выполняю сценарий резервного копирования.
Все работало нормально с этой точки вперед.
Спасибо за вашу помощь.