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 2

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, и она не находила сценарий. Поэтому я явно иду в директ, а затем выполняю сценарий резервного копирования.

Все работало нормально с этой точки вперед.

Спасибо за вашу помощь.