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.
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:
Wird jede Minute ausgeführt und versucht, eine
ls
in 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:
Auf diese Weise können Sie es so oft ausführen, wie Sie es testen müssen.
quelle
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.
quelle