Ich habe ein ausführbares Skript eingefügt /etc/cron.hourly
, aber dieses Skript wurde nicht jede Stunde ausgeführt, sondern überhaupt nicht.
Hier ist das Skript (Hour-Sound), das ich gemacht habe:
#! / bin / bash mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null & spd-say -r -50 -p 50 -t male3 "Es ist jetzt $ (Datum +"% l% p ")" benachrichtige-sende "Es ist:" "$ (Datum +"% l% p ") jetzt." -i ~ / Pictures / "first tee.png" -t 5000
Meine Crontab ist:
DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /home/naruto/Hour-sound.sh
Während die mplayer
und spd-say
Befehle korrekt ausgeführt werden, das notify-send
ist es nicht. Ich habe auch versucht, Fehler in eine Datei umzuleiten:
0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
Aber das zeigte keine Ausgabe. Was mache ich falsch?
/etc/crontab
dierun-parts
Zeile zum Ausführen von Stundenaufträgencron
aus dem Verzeichnis?/etc/crontab
Datei die Zeile17 * * * * root cd / && run-parts --report /etc/cron.hourly
?Antworten:
Wie Sie wahrscheinlich in den Kommentaren zu Ihrer Frage gesehen haben, werden die Cronjobs in
/etc/cron.hourly
(und den anderen, ähnlichen Verzeichnissen) von ausgeführtrun-parts
.run-parts
ist ein wenig wählerisch bei Dateinamen. Standardmäßig werden keine Dateien ausgeführt, deren Dateinamen etwas anderes als (alle von ASCII) enthalten.Wenn Ihr Skript beispielsweise den Dateinamen "myscript.sh" hat, wird es einfach ignoriert, da
run-parts
der Punkt nicht gefällt.quelle
/etc/cron.hourly
nicht unbedingt "zur vollen Stunde" ausgeführt werden? Wenn Ihr Cronjob/etc/crontab
auf der Minutenposition 17 hat, werden die Skripte um 00:17, 01:17 und so weiter ausgeführt. Und wieder nur für den Fall, dass die Berechtigungen des Skripts dem Benutzer root erlauben, sie auszuführen?/etc/cron.d/
keine Schreib- oder Ausführungsberechtigungen für "group" oder "others" haben dürfen. "owner" benötigt die Ausführungsberechtigung, "group" und "others" müssen nur die Leseberechtigung besitzen. Vielleicht trifft das/etc/cron.hourly
auch zu, obwohl ich das nicht getestet habe.Ein Problem ist, dass Sie versuchen, eine grafische Anwendung (
notify-send
) von cron aus auszuführen. Das braucht ein bisschen Feineinstellung. Sie müssenXAUTHORITY
undDISPLAY
Variablen in der crontab festlegen , damit eine Verbindung zu Ihrer laufenden X-Sitzung hergestellt werden kann, und Sie müssen festlegen,XDG_RUNTIME_DIR
dass eine Verbindung zu Ihrer pulseaudio-Sitzung hergestellt werden kann. Leider müssen diese Einstellungen in der Crontab selbst vorgenommen werden, sodass Sie sie nicht verwenden können/etc/cron.hourly
. Führen Sie stattdessen die folgendencrontab -e
Zeilen aus und fügen Sie sie hinzu:Ändern Sie den Wert von
XDG_RUNTIME_DIR
in das, wasecho
von einem Terminal zurückgegeben wird. Auf meinem System ist dies:Es wird wahrscheinlich dasselbe bei dir sein, aber überprüfe es zuerst. Jetzt wird Ihr Skript jede Stunde ausgeführt und sollte wie erwartet funktionieren.
quelle
notify-send
muss dieXAUTHORITY
undDISPLAY
Variablen gesetzt werden , und ii)mplayer
muss denXDG_RUNTIME_DIR
Satz sein. Hast du meinen Vorschlag probiert? Damit sollten beide Probleme behoben sein. Sie hatten wahrscheinlich auch Namensprobleme, da diesrun-parts
in der anderen Antwort erläutert wurde./etc/crontab
, tun Sie das nicht. Sie möchten, dass dies als Ihr Benutzer und nicht als root ausgeführt wird und diese Datei trotzdem ein anderes Format hat. Tun Sie einfach, was ich in meiner Antwort gesagt habe,crontab -e
und fügen Sie die Zeilen dort hinzu.Ein Skript, das mit endet,
.sh
wird nicht in folgendem/etc/cron.hourly
Ordner ausgeführt:Benennen Sie das Skript um
oder setzen Sie den Skriptaufruf in
das erlaubt das
.sh
endequelle
Verwenden Sie kein Skript mit der Erweiterung (abc.sh) und fügen Sie Ihren Platzbedarf hinzu. (cron.hours).
Füge deinen Code in die ABC-Datei ein und speichere ihn (für deinen Bedarf) (dies sollte ein bash-Befehl sein).
verwenden
Befehl, um eine ausführbare Datei zu erstellen.
Es gibt eine vordefinierte Anzahl von Zeilen. Bearbeiten Sie die Zeile von Minuten zu Stunden, und speichern Sie sie.
dann läuft es einwandfrei.
quelle