Задание Ruby cron в Ubuntu молча завершается неудачно при попытке выполнить резервное копирование MySQL на S3 - PullRequest
1 голос
/ 31 мая 2011

У меня есть два задания cron для скриптов ruby, которые я пытаюсь запустить под Ubuntu 10.04.2 LTS на экземпляре AWS EC2. Они оба молча терпят неудачу - я вижу, что они запускаются в / var / log / syslog, но нет никаких результирующих файлов, и передача вывода в файл не дает результата.

Сценарии основаны на резервных копиях ruby ​​sql: http://pauldowman.com/2009/02/08/mysql-s3-backup/

(Это полная резервная копия базы данных и добавочный вывод bin-журнала. Не уверен, что это важно.)

Сценарий работает нормально, если он запускается из командной строки пользователем root или другим пользователем - он запускается, и я вижу файлы, появляющиеся в репозитории S3

Я протестировал cron с простой записью типа "touch ~ / foo", и она работала нормально.

Моя запись cron под root выглядит так:

*/5 * * * * /home/ubuntu/mysql_s3_backup/incremental_backup.rb

Ценю любую помощь или предложения по отладке. Я думаю, что некоторые из зависимостей библиотеки ruby ​​могут быть недоступны, когда cron выполняет задание. Но я не понимаю, почему мне вообще не удается получить какой-либо результат. Очень расстраивает. Спасибо.

1 Ответ

1 голос
/ 31 мая 2011

Сценарий full_backup.rb, на который вы ссылаетесь, содержит следующее:

cmd = "mysqldump --quick --single-transaction ...
#...
run(cmd)

Обратите внимание, что на mysqldump нет полного пути.Задания в Cron обычно выполняются с очень ограниченным PATH в их среде, и я предполагаю, что mysqldump не в этом ограниченном PATH.Вы можете попытаться установить свой собственный PATH в вашем crontab:

PATH='/bin:/usr/bin:/whatever/else/you/need'

*/5 * * * * /home/ubuntu/mysql_s3_backup/incremental_backup.rb

Или в своем скрипте на Ruby:

ENV['PATH'] = '/bin:/usr/bin:/whatever/else/you/need'

Или указать полный путь к mysqldump (и любой другойвнешние исполняемые файлы) в вашем скрипте резервного копирования.

Я бы выбрал один из двух последних вариантов (т.е. укажите ENV['PATH'] в вашем скрипте или используйте полные пути к исполняемым файлам), поскольку это уменьшит вашу зависимость от внешних факторов.и это также поможет избежать проблем с людьми, имеющими свои собственные версии команд, которые вам нужны в их PATH.

Немного проверки и обработки ошибок при вызове run также может быть полезно.

Если какая-либо из необходимых библиотек Ruby была недоступна (из-за разрешений или проблем с путями), вы, вероятно, получите жалобы из сценария.

...