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.
... 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:
cron
er ausgeführt wird, von ENV- oder Shell-spezifischen Dingen (~
Erweiterung) oder Eigentums- und Berechtigungs-Dingen betroffen sein kann oder ...Antworten:
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.
quelle
Sie können die Ausführung der crontab mit folgendem Befehl erzwingen:
quelle
run-parts /etc/cron.daily
als ausgeführt haben. Ich kämpfe gerade gegen diesen Fehler, da mein Skript gutrun-parts
funktioniert, aber nicht funktioniert, wenn es tatsächlich unter dem Cron-Benutzer ausgeführt wird.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:
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:
Also war ich als fraglicher Benutzer in der Lage
quelle