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?
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?
Odpowiedzi:
Jeśli chcesz w łatwy sposób i nie musisz sprawdzać, którą zmienną środowiskową ustawić:
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"
Jeśli uruchomisz skrypt ze swojego środowiska (np. Z okna terminala lub z aplikacji startowych), zostanie ustawiona liczba zmiennych środowiskowych. cron
jednak uruchamia skrypt z ograniczonym zestawem zmiennych środowiskowych.
Ponieważ twój skrypt bez wątpienia używa gsettings
polecenia:
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.
Czytając ten post , a także z doświadczeń z przeszłości, jestem prawie pewien, że DBUS_SESSION_BUS_ADDRESS
należ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ą.
cpu 0.0%
jakim podatku mówimy?
Włóż to do swojego crontab
.
Otwórz swój cron
stół 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 DISPLAY
do środowiska skryptu:
*/5 * * * * DISPLAY=:0 /path/to/script.sh
Zamień :0
na rzeczywisty DISPLAY
(można go znaleźć w echo $DISPLAY
sesji interaktywnej).
W razie potrzeby możesz również dodać XAUTHORITY
zmienną środowiskową:
*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh
Ponownie możesz znaleźć wartość według echo $XAUTHORITY
.
DISPLAY
XAUTHORITY