Ho uno script .sh che scarica una foto dal server del satellite giapponese e la imposta come immagine di sfondo. L'ho inserito nell'elenco di avvio, ma come eseguirlo ogni 5 minuti automaticamente?
Ho uno script .sh che scarica una foto dal server del satellite giapponese e la imposta come immagine di sfondo. L'ho inserito nell'elenco di avvio, ma come eseguirlo ogni 5 minuti automaticamente?
Risposte:
Se vuoi il modo semplice ed evita di dover scoprire quale variabile d'ambiente impostare:
Aggiungi quanto segue alle applicazioni di avvio:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Dash> Applicazioni di avvio> Aggiungi. Aggiungi il comando:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Se si esegue lo script dal proprio ambiente (ad es. Da una finestra terminale o da Applicazioni di avvio), verranno impostate una serie di variabili di ambiente. cron
tuttavia esegue lo script con un set limitato di variabili di ambiente.
Poiché il tuo script utilizza senza dubbio il gsettings
comando:
gsettings get org.gnome.desktop.background picture-uri <wallpaper>
per impostare lo sfondo, quasi certamente il comando si interromperà quando eseguito da cron
.
L'aspetto negativo di "la soluzione pigra" è puramente teorico. Un comando che dorme praticamente continuamente non significa nulla per il tuo sistema.
Leggendo questo post e dalle esperienze del passato, sono abbastanza sicuro che la DBUS_SESSION_BUS_ADDRESS
variabile d'ambiente debba essere impostata.
Per fare ciò, aggiungi la seguente sezione all'inizio del tuo script (sotto lo shebang):
PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
Quindi dovresti essere in grado di eseguirlo correttamente cron
.
Potresti comunque salvare molto bene il trambusto e scegliere l'opzione pigra.
cpu 0.0%
quale imposta stiamo parlando?
Mettilo nel tuo crontab
.
Apri il tuo cron
tavolo per:
crontab -e
Ora aggiungi:
*/5 * * * * /path/to/script.sh
Non dimenticare di rendere lo script eseguibile in anticipo.
Poiché il tuo script dipende da X, probabilmente sarà una buona idea aggiungere l' DISPLAY
ambiente all'ambiente:
*/5 * * * * DISPLAY=:0 /path/to/script.sh
Sostituisci :0
con il tuo effettivo DISPLAY
(può essere trovato dalla echo $DISPLAY
sessione interattiva).
Se necessario, è possibile aggiungere anche la XAUTHORITY
variabile di ambiente:
*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh
Ancora una volta puoi trovare il valore di echo $XAUTHORITY
.
DISPLAY
XAUTHORITY