Я работаю на нескольких разных дистрибутивах Linux (Fedora 11, CentOS 5 и SuSE 10.2) и часто сталкиваюсь с проблемой, когда новый скрипт, который я хочу запустить как задание cron, отлично работает при вызове напрямую из командной строки, но не работает при вызове из cron из-за незначительных изменений в PATH или других необходимых переменных среды.
Есть ли способ протестировать запуск отдельного скрипта, как если бы он запускался из cron, без необходимости запускать весь crontab или использовать run-parts для запуска всего каталога cron.daily / .hourly и т. Д.? Думаю, я мог бы временно отредактировать свой crontab, чтобы запустить скрипт в следующие пару минут, но я бы предпочел иметь более автономное решение, чтобы не рисковать испортить crontab.
Из поиск Гугл на 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.with часто запускается могут иметь побочные эффекты, в зависимости от того, что у вас там есть. Чтобы убедиться, что вы запускаете скрипт в той же среде, в которой он будет при вызове из cron, я бы рекомендовал изменить мой трюк с "ls" выше:
Добавьте строку в ваш crontab для непосредственного запуска скрипта:
* * * * * root /etc/cron.hourly/customscript
Таким образом, вы можете запускать его так часто, как вам нужно для тестирования.
Я не знаю более прямого решения, но вы могли бы создать пользователя (скажем, crontest) с правами доступа к вашему сценарию и использовать специфичный для пользователя crontab для пользователя crontest для тестирования сценария (ов) путем редактирования чтобы скрипт запустился в ближайшие пару минут.