Як я можу протестувати новий сценарій cron?


14

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

Чи є спосіб я перевірити запуск окремого сценарію так, ніби він запускається з cron, не потрібно запускати весь crontab або використовувати run-parts для запуску всього каталогу cron.daily / .hourly і т.д.? Напевно, я міг би тимчасово відредагувати свій crontab, щоб запустити сценарій у найближчі пару хвилин, але я скоріше маю більш самостійне рішення, щоб я не ризикував зіпсувати crontab.

Відповіді:


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

Якщо я виконую завдання, призначене для індивідуального планування, (заплановане на окремі рядки в crontab), я буду розраховувати його на кожну хвилину або кожну другу хвилину, коли я її тестую. Після його тестування я відредагую лінію crontab, щоб вона працювала на бажаній частоті.

Як зауваження, якщо я хочу перевірити, чи працює сам cron належним чином, і надіславши результати за правильною адресою (ДУЖЕ важливо), я додаю наступний рядок до мого / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Запускається щохвилини і намагається зробити lsв каталозі, який не існує. Повідомлення про помилку слід надсилати щохвилини. Я коментую рядок, коли я працюю.

Повернення до свого запитання: Ви, мабуть, не хочете змінювати існуючу роботу cron, яку потрібно часто виконувати, як тому, що є шанс забути змінити її назад, так і тому, що ви працюєте з cron.hourly, cron.daily або cron.where часто може мати побічні ефекти, залежно від того, що ви там маєте. Щоб переконатися, що ви запускаєте скрипт у тому самому середовищі, в якому він буде знаходитись, коли його дзвонять з cron, я рекомендую змінити мій твір "ls" вище:

Додайте рядок у свій crontab, щоб безпосередньо запустити сценарій:

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

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


Дякую - якби я міг би проголосувати і за цю правильну відповідь, я би!
gareth_bowles

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.