Jak mogę przetestować nowy skrypt cron?

14

Pracuję na kilku różnych dystrybucjach Linuksa (Fedora 11, CentOS 5 i SuSE 10.2) i często napotykam problem, w którym nowy skrypt, który chcę uruchomić jako zadanie crona, działa dobrze, gdy jest wywoływany bezpośrednio z wiersza poleceń, ale kończy się niepowodzeniem po wywołaniu z crona z powodu niewielkich zmian PATH lub innych wymaganych zmiennych środowiskowych.

Czy istnieje sposób, w jaki mogę przetestować uruchomienie pojedynczego skryptu, tak jakby był uruchamiany z crona, bez konieczności uruchamiania całego crontab lub używania elementów run do uruchamiania całego katalogu cron.daily / .hourly itp.? Myślę, że mógłbym tymczasowo edytować mój plik crontab, aby uruchomić skrypt w ciągu kilku najbliższych minut, ale wolałbym mieć bardziej samodzielne rozwiązanie, aby nie ryzykować zepsucia pliku crontab.

gareth_bowles
źródło

Odpowiedzi:

9

Z wyszukiwania Google napath 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

Zasadniczo chcesz ustawić ŚCIEŻKĘ, a następnie nie musisz się martwić o różnice. Szybki test polega również na uruchomieniu skryptu za pośrednictwem protokołu SSH na wszystkich urządzeniach korzystających z tych samych zmiennych środowiskowych.

Jeremy L.
źródło
Dzięki, nie pomyliłem się, że crontab jest jak skrypt, w którym można zadeklarować zmienne środowiskowe w crontabie.
gareth_bowles
7

Jeśli prowadzę indywidualnie zaplanowane zadanie CRON (osobna linia w crontab), zaplanuję je na każdą minutę lub co drugą minutę podczas testowania. Po przetestowaniu dokonam edycji linii crontab, aby działała na żądanej częstotliwości.

Na marginesie, jeśli chcę przetestować, że sam cron działa poprawnie, a wyniki e-mailem na poprawny adres (BARDZO ważne) dodam następujący wiersz do mojego pliku / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Działa co minutę i próbuje wykonać lsw katalogu, który nie istnieje. Co minutę powinien przesyłać wiadomość e-mail z komunikatem o błędzie. Komentuję ten wiersz, kiedy już działa.

Wracając do pytania: Prawdopodobnie nie chcesz modyfikować istniejącego zadania cron, aby często się uruchamiało, zarówno dlatego, że istnieje szansa, że ​​zapomnisz zmienić je z powrotem, jak i dlatego, że uruchamiasz cron.hourly, cron.daily lub cron. Cokolwiek często może mieć skutki uboczne, w zależności od tego, co tam masz. Aby mieć pewność, że skrypt działa w tym samym środowisku, w którym będzie się znajdował po wywołaniu z crona, zaleciłbym modyfikację mojej sztuczki „ls” powyżej:

Dodaj wiersz do swojego crontab, aby uruchomić skrypt bezpośrednio:

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

W ten sposób możesz go uruchamiać tak często, jak potrzebujesz go przetestować.

Schof
źródło
Dzięki - gdybym mógł głosować również na tę poprawną odpowiedź, zrobiłbym to!
gareth_bowles
0

Nie znam bardziej bezpośredniego rozwiązania, ale możesz utworzyć użytkownika (powiedzmy crontest) z uprawnieniami do skryptu i użyć crontab specyficznego dla użytkownika dla użytkownika „crontest” w celu przetestowania skryptu poprzez edycję uruchomienie skryptu w ciągu kilku minut.

Kingfish
źródło