Wie kann ich ein neues Cron-Skript testen?

14

Ich arbeite unter verschiedenen Linux-Distributionen (Fedora 11, CentOS 5 und SuSE 10.2) und stoße häufig auf ein Problem, bei dem ein neues Skript, das ich als Cron-Job ausführen möchte, problemlos funktioniert, wenn es direkt über die Befehlszeile aufgerufen wird. Der Aufruf von cron schlägt jedoch aufgrund geringfügiger Abweichungen im PATH oder anderer erforderlicher Umgebungsvariablen fehl.

Gibt es eine Möglichkeit, ein einzelnes Skript so zu testen, als würde es von cron ausgeführt, ohne dass die gesamte crontab ausgeführt werden muss oder Run-Parts zum Ausführen des gesamten Verzeichnisses cron.daily / .hourly usw. verwendet werden müssen? Ich schätze, ich könnte meine Crontab vorübergehend bearbeiten, um das Skript in den nächsten Minuten auszuführen, aber ich hätte lieber eine eigenständigere Lösung, damit ich nicht riskiere, die Crontab durcheinander zu bringen.

gareth_bowles
quelle

Antworten:

9

Von Google - Suche aufpath 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

Grundsätzlich möchten Sie den PATH einstellen und müssen sich dann nicht um die Variationen kümmern. Der Schnelltest besteht auch darin, Ihr Skript über SSH auf allen Ihren Boxen unter Verwendung derselben Umgebungsvariablen auszuführen.

Jeremy L
quelle
Vielen Dank, ich habe nicht daran gedacht, dass eine Crontab genau wie ein Skript ist, in dem Sie Umgebungsvariablen innerhalb der Crontab deklarieren können.
gareth_bowles
7

Wenn ich einen individuell geplanten Cron-Job ausführe (eine separate Zeile in crontab), plane ich ihn für jede oder jede zweite Minute, während ich ihn teste. Sobald es getestet wurde, bearbeite ich die Crontab-Linie so, dass sie auf der von mir gewünschten Frequenz läuft.

Als Randnotiz: Wenn ich testen möchte, ob Cron selbst ordnungsgemäß funktioniert, und die Ergebnisse per E-Mail an die richtige Adresse senden möchte (SEHR wichtig), füge ich meiner / etc / crontab die folgende Zeile hinzu:

 * * * * * root ls /doesnotexistfoobar

Wird jede Minute ausgeführt und versucht, eine lsin einem nicht vorhandenen Verzeichnis auszuführen. Sollte jede Minute eine Fehlermeldung per E-Mail senden. Ich kommentiere die Zeile aus, wenn ich es zum Laufen gebracht habe.

Zurück zu Ihrer Frage: Wahrscheinlich möchten Sie den vorhandenen Cron-Job nicht so ändern, dass er häufig ausgeführt wird, da möglicherweise vergessen wird, ihn zurückzusetzen, und weil Sie Ihren Cron.hourly, cron.daily oder cron.whatever häufig ausführen könnte Nebenwirkungen haben, je nachdem, was Sie dort haben. Um sicherzustellen, dass Sie das Skript in derselben Umgebung ausführen, in der es beim Aufruf von cron ausgeführt wird, würde ich empfehlen, den obigen "ls" -Trick zu ändern:

Fügen Sie Ihrer crontab eine Zeile hinzu, um das Skript direkt auszuführen:

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

Auf diese Weise können Sie es so oft ausführen, wie Sie es testen müssen.

Schof
quelle
Danke - wenn ich auch dafür als richtige Antwort stimmen könnte, würde ich!
gareth_bowles
0

Ich kenne keine direktere Lösung, aber Sie könnten einen Benutzer (z. B. crontest) mit Privilegien für Ihr Skript erstellen und die benutzerspezifische crontab für den Benutzer 'crontest' verwenden, um die Skripte durch Bearbeiten zu testen Das Skript soll in den nächsten Minuten ausgeführt werden.

Kingfish
quelle