Cron.hourly läuft nicht

54

Ok, also ich habe mein Skript gemacht, ich habe es abgelegt, /etc/cron.hourlydann habe ich chmod 777die Datei, aber es wird nicht (automatisch) ausgeführt. Wenn ich es manuell ausführe, funktioniert es einwandfrei. Muss ich noch etwas tun?

Switchkick
quelle
Diese Antwort hätte nicht so viele positive Stimmen ohne Namen der Datei und des Inhalts erhalten dürfen.
Benutzer unbekannt

Antworten:

13

Warum nicht crontab (/ etc / crontab) verwenden und im Stundenfeld * / 1 verwenden? Ich habe dies verwendet, um alle 5 Minuten ein Skript auszuführen, und es funktioniert gut:

# m h dom mon dow user  command
* */1  * * *   user    command
oli206
quelle
6
Verwenden cron.dailyund Freunde funktioniert ein bisschen besser, wenn die Maschine nicht die ganze Zeit läuft, weil Anacron versucht, den richtigen Zeitplan zu approximieren, während Cron sie einfach nicht laufen lässt, wenn die Maschine nicht die ganze Nacht läuft. Für Stundenjobs ist dies wahrscheinlich nicht so wichtig.
Poolie
9
Ich freue mich sehr über die nächste Antwort, da sie das Problem mit cron.hourly angeht, anstatt eine Problemumgehung zu finden.
Tishma
4
Dies ist keine Antwort auf die Frage
Josh123a123
@poolie Wie auf/etc/crontab : zu sehen istcron.daily , cron.weeklyund cron.monthly stündlich mit anacron (sofern verfügbar) ausführen run-parts --report /etc/cron.hourly.
Pablo A
144

Einträge in cron.hourlywerden vom Laufteilemechanismus ausgeführt ( man run-partsfür weitere Informationen). Und run-partsist wählerisch, welche Dateinamen es für gültig hält.

Wenn Sie Ihrem Skript beispielsweise eine Erweiterung zuweisen, wird es ungültig und der Job wird nicht ausgeführt. [a-zA-Z0-9_-]sind die gültigen Zeichen, also das '.' macht es ungültig.

Testen Sie beim Hinzufügen eines Jobs zu /etc/cron.hourly(oder .daily, .weeklyusw.) immer danach, dass er run-partstatsächlich ausgeführt wird, indem Sie den folgenden Befehl eingeben:

run-parts --test /etc/cron.hourly

Wenn durch Ausführen dieses Befehls Ihre Datei angezeigt wird, bedeutet dies, dass sie funktioniert hat. Andernfalls ist Ihr Dateiname ungültig, wenn nichts angezeigt wird.

Wie hieß dein Drehbuch?

DaithiF
quelle
Es gibt zwei: cerebro_random_response.sh und Cerebro Temperature.sh nicht gut?
Switchkick
21
richtig, nicht gut :) [a-zA-Z0-9_-] sind die gültigen Zeichen, also das '.' macht es ungültig. Dies ist, was ich oben mit "Geben Sie Ihrem Skript eine Erweiterung macht es ungültig"
gemeint
11
Oh mein Gott, das hat mir nur große Kopfschmerzen erspart. DANKESCHÖN! giving your script an extension will make it invalid and result in the job not being run
Jonathan S. Fisher
Sie können auch verwenden --report, um die Skripte tatsächlich auszuführen.
Pablo A
5

Ihr Problem liegt wahrscheinlich an den zu offenen Berechtigungen, mit denen jeder Ihre Datei bearbeiten kann. Versuchen Sie es 755stattdessen.

Ein Blick in die Cron-Einträge in Ihrer Syslog-Ausgabe sollte dies bestätigen.

Schrei Havok
quelle
4

DaithiFs Antwort sollte die richtige sein.

Auch mein Skript hatte nicht #!/bin/bashin der ersten Zeile. Obwohl das Skript mit der Befehlszeile ausgeführt werden konnte, wurde es mit der run-partsMeldung "Exec format error" abgelehnt.

Durch Ändern des Dateinamens von scriptname.shin scriptnameund Hinzufügen der #!/bin/bashersten Zeile konnte mein Skript stündlich ausgeführt werden.

Ben Lin
quelle
-1

Wenn du rennst

crontab -l

Ist diese Aufgabe auf der Liste?

Wenn nicht, füge es hinzu

crontab -e

füge diese Zeile hinzu

0 * * * * yourScript

Wenn es in dieser Liste enthalten ist, versuchen Sie, den Pfad der Programmiersprache oben in Ihrem Skript einzufügen

Beispiel:

bash: #!/bin/bash

Diese 2 Dinge haben meine Probleme immer gelöst :)

Wolfy
quelle
Alles erledigt und das Skript ist gut, es funktioniert wie ein Zauber. Es ist auch in der Crontab-Liste, aber es wird keine stündliche Aufgabe ausgeführt.
Trotzdem