Esecuzione di .sh ogni 5 minuti


12

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?


1
Prova cronmaker.com, lì puoi creare espressioni cron e metterlo con crontab -e
Siamo Borg

2
L'immagine cambia anche ogni 5 minuti? Prova a utilizzare un intervallo che crei meno carico non necessario sul server di destinazione. Oppure assicurati di scaricare solo se il file è davvero cambiato.
til_b

1
A proposito, qual è l'url per gli sfondi spaziali?
bohdan_trotsenko

Risposte:


14

L'opzione pigra

Se vuoi il modo semplice ed evita di dover scoprire quale variabile d'ambiente impostare:

  • Assicurati che la tua sceneggiatura includa lo shebang
  • Renderlo eseguibile
  • 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"

Spiegazione

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. crontuttavia esegue lo script con un set limitato di variabili di ambiente.
Poiché il tuo script utilizza senza dubbio il gsettingscomando:

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.

Informazioni addizionali; in alternativa

Leggendo questo post e dalle esperienze del passato, sono abbastanza sicuro che la DBUS_SESSION_BUS_ADDRESSvariabile 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.


@AleksanderMahnyov Prego. Sono contento che funzioni :)
Jacob Vlijm,

2
È molto meglio usare un lavoro cron.
Luka Ramishvili,

1
@LukaRamishvili Grazie per il commento. Tuttavia: a. E perché? un comando di sospensione non significa nulla per il tuo sistema. b. Ho persino incluso l'opzione.
Jacob Vlijm,

1
Altrimenti, una bella ricerca sulle variabili della sessione di gnome, aiuterebbe molto l'OP, poiché sarebbe richiesto in entrambi i modi.
Luka Ramishvili,

2
Ho appena guardato: di cpu 0.0%quale imposta stiamo parlando?
Jacob Vlijm,

24

Mettilo nel tuo crontab.

Apri il tuo crontavolo 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' DISPLAYambiente all'ambiente:

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

Sostituisci :0con il tuo effettivo DISPLAY(può essere trovato dalla echo $DISPLAYsessione interattiva).

Se necessario, è possibile aggiungere anche la XAUTHORITYvariabile di ambiente:

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

Ancora una volta puoi trovare il valore di echo $XAUTHORITY.


1
Non sono sicuro che funzioni con variabili d'ambiente limitate di cron, ma vediamo se OP menziona che funziona :)
Jacob Vlijm,

1
@AleksanderMahnyov Modifica la tua domanda per aggiungere lo script, difficile da dire senza vedere il contenuto ... DISPLAYXAUTHORITY
probabilmente

1
@Kartagis Cron non può gestire i secondi, inoltre stai cercando di farlo per ore che è ancora sintatticamente sbagliato ..
heemayl

2
Adoro questo metodo piuttosto che il "metodo pigro", perché conoscevo cron, ma avevo bisogno di un corso di aggiornamento. Questo è esattamente quello che ho fatto, grazie mille! :)
ZaxLofful,

2
Approccio migliore rispetto alla risposta accettata. :)
Sandeep Kumar il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.