Uruchamianie .sh co 5 minut

12

Mam skrypt .sh, który pobiera zdjęcie z serwera japońskiego satelity i ustawia je jako obraz tła. Umieściłem go na liście startowej, ale jak mam go uruchamiać co 5 minut automatycznie?

Aleksander Mahnyov
źródło
1
Wypróbuj cronmaker.com, tam możesz tworzyć wyrażenia cron i umieszczać je w crontab -e
Jesteśmy Borg
2
Czy obraz zmienia się nawet co 5 minut? Spróbuj użyć interwału, który tworzy mniej niepotrzebnego obciążenia na serwerze docelowym. Lub upewnij się, że pobierasz tylko wtedy, gdy plik jest naprawdę zmieniony.
til_b
1
Przy okazji, jaki jest adres URL tła kosmicznego?
bohdan_trotsenko

Odpowiedzi:

14

Leniwa opcja

Jeśli chcesz w łatwy sposób i nie musisz sprawdzać, którą zmienną środowiskową ustawić:

  • Upewnij się, że twój skrypt zawiera shebang
  • Zrób to
  • Dodaj następujące aplikacje do aplikacji startowych:

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

    Dash> Aplikacje startowe> Dodaj. Dodaj polecenie:

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

Wyjaśnienie

Jeśli uruchomisz skrypt ze swojego środowiska (np. Z okna terminala lub z aplikacji startowych), zostanie ustawiona liczba zmiennych środowiskowych. cronjednak uruchamia skrypt z ograniczonym zestawem zmiennych środowiskowych.
Ponieważ twój skrypt bez wątpienia używa gsettingspolecenia:

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

aby ustawić tapetę, prawie na pewno polecenie zostanie przerwane po uruchomieniu cron.

Minusem „leniwego rozwiązania” jest czysto teoretyczny. Polecenie, które śpi praktycznie nieprzerwanie, nic nie znaczy dla twojego systemu.

Dodatkowe informacje; alternatywnie

Czytając ten post , a także z doświadczeń z przeszłości, jestem prawie pewien, że DBUS_SESSION_BUS_ADDRESSnależy ustawić zmienną środowiskową.

Aby to zrobić, dodaj następującą sekcję na początku skryptu (poniżej shebang):

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

Powinieneś być w stanie pomyślnie uruchomić go z cron.

Możesz jednak bardzo dobrze uratować zgiełk i wybrać opcję leniwą.

Jacob Vlijm
źródło
@AleksanderMahnyov Nie ma za co. Cieszę się, że to działa :)
Jacob Vlijm
2
O wiele lepiej jest użyć zadania crona.
Luka Ramishvili
1
@LukaRamishvili Dzięki za komentarz. Jednak: A dlaczego to? polecenie uśpienia nic nie znaczy dla twojego systemu. b. Włączyłem nawet opcję.
Jacob Vlijm
1
W przeciwnym razie miłe badanie zmiennych sesji gnome, bardzo pomogłoby OP, ponieważ byłoby to wymagane w obu przypadkach.
Luka Ramishvili
2
Właśnie spojrzałem: o cpu 0.0%jakim podatku mówimy?
Jacob Vlijm
25

Włóż to do swojego crontab.

Otwórz swój cronstół przez:

crontab -e

Teraz dodaj:

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

Nie zapomnij wcześniej wykonać skryptu.


Ponieważ twój skrypt zależy od X, prawdopodobnie dobrym pomysłem będzie dodanie go DISPLAYdo środowiska skryptu:

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

Zamień :0na rzeczywisty DISPLAY(można go znaleźć w echo $DISPLAYsesji interaktywnej).

W razie potrzeby możesz również dodać XAUTHORITYzmienną środowiskową:

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

Ponownie możesz znaleźć wartość według echo $XAUTHORITY.

heemayl
źródło
1
Nie jestem pewien, czy działa z ograniczonymi zmiennymi środowiskowymi crona, ale zobaczmy, czy OP wspomina, że ​​działa :)
Jacob Vlijm
1
@AleksanderMahnyov Edytuj swoje pytanie, aby dodać skrypt, trudno powiedzieć, nie widząc treści .. DISPLAYXAUTHORITY
prawdopodobnie
1
@Kartagis Cron nie radzi sobie z sekundami, a także próbujesz robić przez wiele godzin, co jest nadal błędne składniowo.
heemayl
2
Uwielbiam tę metodę, a nie „leniwą metodę”, ponieważ wiedziałem o cronie, ale potrzebowałem trochę odświeżającego kursu. Właśnie to zrobiłem, wielkie dzięki! :)
ZaxLofful,
2
Lepsze podejście niż zaakceptowana odpowiedź. :)
Sandeep Kumar