Come posso eseguire lo script bash in background?

Oct 24 2020

Sto imparando lo scripting bash e ho appena creato un breve progetto per avvisarmi (con invio di notifica) quando la mia batteria è scarica o carica.

Vorrei alcuni suggerimenti su come eseguire questo script senza mostrare il terminale. La mia idea è di aggiungerlo nel software "Applicazioni di avvio" per eseguirlo all'avvio del sistema, ma non voglio mostrare il terminale, solo per eseguire in background.

Risposte

1 kanehekili Oct 24 2020 at 20:57

Potresti configurare un servizio systemd.

Puoi creare un file (come sudo) con il tuo editor preferito (nano, vim ecc.) Come:

sudo nano /etc/systemd/system/myexecuteable.service

Dovrebbe contenere almeno quanto segue:

[Unit]
Description=start my executable after multi-user target

[Service]
Type=simple
ExecStart=/path/to/my/executable

[Install]
WantedBy=multi-user.target

Per garantire che il servizio venga avviato dopo il riavvio, eseguire: sudo systemctl enable myexecutable.service

Quel servizio verrà eseguito continuamente se bash ha una sorta di loop. Se quell'eseguibile ha qualche output (usa "logger per quello in un file bash) puoi controllarlo in qualsiasi momento usandojournalctl -u myexecutable.service

1 Seamus Oct 24 2020 at 23:32

Uno script può essere eseguito in background dalla riga di comando in questo modo:

$ ./myscript.sh &

In altre parole, aggiungi &al comando.

Hai detto di voler eseguire questo script "senza mostrare il termial". Penso che ci siano due modi per farlo:

  1. creare un systemdservizio - come in questa risposta

  2. avvia lo script come cronlavoro all'avvio del sistema:

Per impostare un cronlavoro, dovrai creare una nuova crontabvoce.

Per fare ciò, apri un terminale e digita il seguente comando:

$ crontab -e

Questo aprirà il tuo crontabin un editor ( nanoè una buona scelta per l'editor). Quando sei nell'editor, aggiungi la seguente riga in fondo al file:

@reboot /home/user/myscript.sh & >> /home/user/myscript.log 2>&1 

Dov'è /home/user/myscript.shil percorso completo del file di script. Qualsiasi output dallo script verrà reindirizzato al file in /home/user/myscript.log. Assicurati di controllare questo file di registro per eventuali messaggi di errore.

Salvare il file ( ^ o) se si utilizza nanoed uscire dall'editor ( ^ x).

Alcune cose da ricordare:

  1. Assicurati che myscript.shsia eseguibile .

  2. Se usi dei comandi in myscript.sh, assicurati che il sistema sappia dove trovarli, ad esempio usa un percorso completo per il comando o dichiara un PATH nel tuo script.

Facci sapere se hai ulteriori domande (pubblica un commento) e cercheremo di aiutarti.