Crontab с Ruby-скриптом, возвращающим код ошибки 1 - PullRequest
2 голосов
/ 22 марта 2012

Я переписываю некоторые сценарии оболочки на 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 ]

0 голосов
/ 22 марта 2012

Итак, с помощью @tomodachi я пошел дальше и явно написал следующую строку crontab, и теперь она работает.

*/15 * * * * cd /root/code/ && ./backup_images.rb local > /root/code/log/script.log

Итак, в основном я пытался выполнить команду из оболочки bash ион не нашел сценарий.Поэтому я явно перехожу к прямой и затем выполняю скрипт резервного копирования.

С этого момента все работало нормально.

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

0 голосов
/ 22 марта 2012

Я считаю, что ошибка в том, что вам нужно применить путь к ruby ​​в вашем файле crontab

, но лично я предпочитаю просто указать путь к файлу ruby, который будет выполнен.

* / 5 ** * * /root/code/backup_images.rb local

, а затем добавьте
#! / usr / bin / ruby ​​
в начало backup_images.rb

и вы такженужно сделать исполняемый файл ruby ​​с помощью chmod + x

...