Wie kann ich Cron dazu bringen, einen Job zum Testen / Debuggen auszuführen? ohne den Zeitplan zu ändern!


134

Ich habe einen Cron-Job, der täglich ausgeführt werden soll. Gibt es eine andere Möglichkeit, den Befehl jetzt zu testen, um festzustellen, ob er wie beabsichtigt funktioniert?


Ich verstehe deine frage nicht Warum nicht einfach den Befehl ausführen?
Favadi

21
Ich weiß, dass der Befehl funktioniert, wenn er in die Shell (meine Shell) eingegeben wird, aber ich möchte wissen, ob er funktioniert, wenn croner ausgeführt wird, von ENV- oder Shell-spezifischen Dingen ( ~Erweiterung) oder Eigentums- und Berechtigungs-Dingen betroffen sein kann oder ...
Ali

2
Warum also nicht mit demselben Befehl jede Minute einen neuen Cron-Job erstellen?
Favadi

13
Dies ist genau das, was ich letztendlich getan habe, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, cron mitzuteilen, dass Sie einen Testlauf auf Job Nr. 7 wünschen! Sicherlich hatten schon andere dieses Problem / diese Bitte / diesen Wunsch!
Ali

4
Sehr spät zu der Szene hier über Google, aber es war alles falsch an Favadis Antwort. Es war klar, dass er es mit cron testen wollte, ohne die crontab speziell dafür zu bearbeiten. Schlimmer als jemand, der Ihnen sagt, was Sie wollen, ist es falsch, wenn er nicht versucht hat, den Anwendungsfall zu verstehen.
HörmannHH

Antworten:


32

Soweit ich weiß, gibt es keine Möglichkeit, dies direkt zu tun, da cron einen speziellen Zweck hat - das Ausführen von Zeitplanbefehlen zu einer bestimmten Zeit. Daher ist es am besten, entweder manuell einen crontab-Eintrag zu erstellen oder ein Skript zu schreiben, mit dem die Umgebung entfernt und zurückgesetzt wird.


57

Sie können die Ausführung der crontab mit folgendem Befehl erzwingen:

run-parts /etc/cron.daily

9
... unter der Annahme, dass der Cron-Job des OP (vor 3 Jahren gefragt) in cron.daily statt in einer einzelnen Crontab ausgeführt wird.
Jeff Schaller

18
Dies simuliert die Umgebung des Cron-Benutzers jedoch nicht vollständig. Daher ist es sehr wahrscheinlich, dass Sie weiterhin Fehler haben, da sich Ihr PATH und andere Envvars möglicherweise von dem Benutzer unterscheiden, den Sie run-parts /etc/cron.dailyals ausgeführt haben. Ich kämpfe gerade gegen diesen Fehler, da mein Skript gut run-partsfunktioniert, aber nicht funktioniert, wenn es tatsächlich unter dem Cron-Benutzer ausgeführt wird.
ArtHare

42

Sie können die Cron-Benutzerumgebung simulieren, wie unter "Manuelles und sofortiges Ausführen eines Cron-Jobs" erläutert . Auf diese Weise können Sie testen, ob der Job funktioniert, wenn er als Cron-Benutzer ausgeführt wird.


Auszug aus dem Link:


Schritt 1 : Ich habe diese Zeile vorübergehend in die crontab des Benutzers eingefügt:

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

dann nahm es heraus, sobald die Datei geschrieben wurde.

Schritt 2 : Ich habe ein kleines Run-as-Cron-Bash-Skript erstellt, das Folgendes enthält:

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "$@"

Also war ich als fraglicher Benutzer in der Lage

run-as-cron /the/problematic/script --with arguments --and parameters

Nützlicher Trick. Das hilft natürlich nicht, wenn Sie ein Prozentzeichen in Ihrem Befehl haben.
basic6
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.