Как я могу протестировать новый скрипт cron?

14

Я работаю на нескольких разных дистрибутивах Linux (Fedora 11, CentOS 5 и SuSE 10.2) и часто сталкиваюсь с проблемой, когда новый скрипт, который я хочу запустить как задание cron, работает нормально при вызове напрямую из командной строки, но происходит сбой при вызове из cron из-за небольших изменений в PATH или других необходимых переменных среды.

Есть ли способ протестировать запуск отдельного скрипта, как если бы он запускался из cron, без необходимости запуска всего crontab или использования run-parts для запуска всего каталога cron.daily / .hourly и т. Д.? Я думаю, что я мог бы временно отредактировать свой crontab, чтобы запустить скрипт в ближайшие пару минут, но я бы предпочел более автономное решение, чтобы не рисковать испортить crontab.

gareth_bowles
источник

Ответы:

9

Из поиска Google наpath in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Вы в основном хотите установить PATH, а затем не беспокоиться о вариациях. Кроме того, быстрый тест - запустить скрипт через SSH на всех ваших компьютерах, используя одни и те же переменные среды.

Джереми Л
источник
Спасибо, я не заметил, что crontab похож на скрипт, в котором вы можете объявлять переменные окружения внутри crontab.
gareth_bowles
7

Если я запускаю индивидуально запланированное задание cron (отдельная строка в crontab), я планирую его на каждую минуту или каждую минуту, пока я его тестирую. После того, как он протестирован, я отредактирую строку crontab так, чтобы она работала на желаемой частоте.

В качестве дополнительного примечания, если я хочу проверить, что сам cron работает должным образом, и отправить результаты по электронной почте (ОЧЕНЬ важно), я добавлю следующую строку в мой / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Запускается каждую минуту и ​​пытается lsсоздать каталог, который не существует. Должен по электронной почте сообщение об ошибке каждую минуту. Я комментирую строку, когда у меня это работает.

Вернемся к вашему вопросу: вы, вероятно, не хотите изменять существующее задание cron для частого запуска, потому что есть вероятность забыть изменить его обратно, а также потому, что запускаете ваши cron.hourly, cron.daily или cron.wh независимо от того, как часто может иметь побочные эффекты, в зависимости от того, что у вас там. Чтобы убедиться, что вы запускаете скрипт в той же среде, в которой он будет при вызове из cron, я бы рекомендовал изменить мой трюк "ls" выше:

Добавьте строку в ваш crontab, чтобы запустить скрипт напрямую:

 * * * * * root /etc/cron.hourly/customscript

Таким образом, вы можете запускать его так часто, как вам нужно, чтобы проверить его.

Schof
источник
Спасибо - если бы я мог проголосовать за это как за правильный ответ, я бы тоже!
gareth_bowles
0

Я не знаю более прямого решения, но вы можете создать пользователя (скажем, crontest) с privs для вашего скрипта и использовать пользовательский crontab для пользователя 'crontest', чтобы протестировать скрипт (ы), отредактировав чтобы скрипт запускался в ближайшие пару минут.

ментициррус
источник