Alle 5 Minuten .sh ausführen


12

Ich habe ein .sh-Skript, das ein Foto vom japanischen Satellitenserver herunterlädt und als Hintergrundbild festlegt. Ich habe es in die Startliste aufgenommen, aber wie führe ich es alle 5 Minuten automatisch aus?


1
Probieren Sie cronmaker.com aus, dort können Sie Cron-Ausdrücke erstellen und mit crontab -e setzen
Wir sind Borg

2
Ändert sich das Bild sogar alle 5 Minuten? Versuchen Sie, ein Intervall zu verwenden, das den Zielserver weniger unnötig belastet. Oder stellen Sie sicher, dass Sie nur herunterladen, wenn die Datei wirklich geändert wurde.
til_b

1
Übrigens, wie lautet die URL für die Weltraumhintergründe?
Bohdan_Trotsenko

Antworten:


14

Die faule Option

Wenn Sie den einfachen Weg suchen und nicht herausfinden müssen, welche Umgebungsvariable festgelegt werden soll:

  • Stellen Sie sicher, dass Ihr Skript den Shebang enthält
  • Mach es ausführbar
  • Fügen Sie Startanwendungen Folgendes hinzu:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"

    Dash> Startanwendungen> Hinzufügen. Fügen Sie den Befehl hinzu:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"

Erläuterung

Wenn Sie das Skript in Ihrer eigenen Umgebung ausführen (z. B. in einem Terminalfenster oder in Startanwendungen), wird eine Reihe von Umgebungsvariablen festgelegt. cronFührt Ihr Skript jedoch mit einem begrenzten Satz von Umgebungsvariablen aus.
Da Ihr Skript zweifellos den folgenden gsettingsBefehl verwendet:

gsettings get org.gnome.desktop.background picture-uri <wallpaper>

Um das Hintergrundbild festzulegen, wird der Befehl mit ziemlicher Sicherheit unterbrochen, wenn er ausgeführt wird cron.

Der Nachteil von "der faulen Lösung" ist rein theoretisch. Ein Befehl, der praktisch ununterbrochen schläft, bedeutet für Ihr System nichts .

Zusätzliche Information; Alternative

Beim Lesen dieses Beitrags und aufgrund früherer Erfahrungen bin ich mir ziemlich sicher, dass die DBUS_SESSION_BUS_ADDRESSUmgebungsvariable festgelegt werden muss.

Fügen Sie dazu den folgenden Abschnitt am Anfang Ihres Skripts hinzu (unter dem Shebang):

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

Dann sollten Sie es erfolgreich ausführen können cron.

Sie könnten jedoch sehr gut die Hektik retten und die Option faul wählen.


@AleksanderMahnyov Gern geschehen.
Ich bin

2
Es ist so viel besser, einen Cron-Job zu verwenden.
Luka Ramishvili

1
@LukaRamishvili Danke für den Kommentar. Jedoch: a. Und warum ist das? Ein Schlafbefehl bedeutet nichts für Ihr System. b. Ich habe sogar die Option aufgenommen.
Jacob Vlijm

1
Andernfalls würde eine gute Recherche über die Gnome-Sitzungsvariablen dem OP sehr helfen, da dies in beiden Fällen erforderlich wäre.
Luka Ramishvili

2
Ich habe nur geschaut: Über cpu 0.0%welche Steuer sprechen wir?
Jacob Vlijm

24

Legen Sie es in Ihre crontab.

Öffnen Sie Ihren cronTisch durch:

crontab -e

Fügen Sie nun hinzu:

*/5 * * * * /path/to/script.sh

Vergessen Sie nicht, das Skript vorher ausführbar zu machen.


Da Ihr Skript von X abhängt, ist es wahrscheinlich eine gute Idee, das DISPLAYzur Umgebung des Skripts hinzuzufügen :

*/5 * * * * DISPLAY=:0 /path/to/script.sh

Ersetzen Sie :0durch Ihre tatsächliche DISPLAY(kann durch echo $DISPLAYinteraktive Sitzung gefunden werden).

Bei Bedarf können Sie auch die XAUTHORITYUmgebungsvariable hinzufügen :

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh

Wieder können Sie den Wert durch finden echo $XAUTHORITY.


1
Ich
bin

1
@AleksanderMahnyov Bitte bearbeiten Sie Ihre Frage, um das Skript hinzuzufügen, schwer zu sagen, ohne den Inhalt zu sehen .. DISPLAYXAUTHORITY
möglicherweise

1
@ Kartagis Cron kann nicht mit Sekunden umgehen, auch Sie versuchen, für Stunden zu tun, was immer noch syntaktisch falsch ist ..
heemayl

2
Ich liebe diese Methode eher als die "faule Methode", weil ich etwas über Cron wusste, aber einen Auffrischungskurs brauchte. Genau das habe ich getan, vielen Dank! :)
ZaxLofful

2
Besserer Ansatz als die akzeptierte Antwort. :)
Sandeep Kumar
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.