Как я могу протестировать новый скрипт cron?
Я работаю на нескольких разных дистрибутивах Linux (Fedora 11, CentOS 5 и SuSE 10.2) и часто сталкиваюсь с проблемой, когда новый скрипт, который я хочу запустить как задание cron, работает нормально при вызове прямо из командной строки, но происходит сбой при вызове из cron из-за небольших изменений в PATH или других необходимых переменных среды.
Есть ли способ протестировать запуск отдельного скрипта, как если бы он запускался из cron, без необходимости запуска всего crontab или использования run-parts для запуска всего каталога cron.daily/ .hourly и т. Д.? Я думаю, что я мог бы временно отредактировать свой crontab для запуска скрипта в ближайшие пару минут, но я бы предпочел более автономное решение, чтобы не рисковать испортить crontab.
3 ответа
Из поиска 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 на всех ваших компьютерах, используя одни и те же переменные среды.
Если я запускаю индивидуально запланированное задание 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
Таким образом, вы можете запускать его так часто, как вам нужно, чтобы проверить его.
Я не знаю более прямого решения, но вы могли бы создать пользователя (скажем, crontest) с privs для вашего скрипта и использовать пользовательский crontab для пользователя 'crontest', чтобы протестировать скрипт (ы), отредактировав чтобы скрипт запускался в ближайшие пару минут.