Come eseguire comandi e script Linux automaticamente al riavvio del sistema

How Run Linux Commands

L'esecuzione automatica di app e script all'avvio può essere utile per automatizzare attività ed eventi di avvio comuni. Questo articolo spiegherà alcuni metodi che possono essere utilizzati per avviare app e script su un nuovo riavvio o un nuovo accesso.

Applicazioni di avvio

Ubuntu e altre distribuzioni basate su GNOME vengono fornite con un'applicazione chiamata semplicemente Applicazioni di avvio. Può essere utilizzato per la gestione di app e script che vengono eseguiti su un nuovo riavvio o accesso del sistema.



Avvia l'app Applicazioni di avvio dal programma di avvio dell'applicazione e fai clic sul pulsante Aggiungi per aggiungere una nuova voce.





Compila i campi Nome e Comando secondo le tue esigenze, quindi fai clic sul pulsante Aggiungi per completare la creazione di una nuova voce. La voce creata nello screenshot qui sotto invierà un promemoria Make a Backup come notifica di sistema ad ogni riavvio / accesso. Puoi sostituirlo con il tuo comando o con il percorso completo del tuo script bash. Puoi anche utilizzare qualsiasi comando di sistema o eseguibile esistente di solito situato in varie cartelle bin nel filesystem.

Come detto sopra, ad ogni riavvio viene mostrato un promemoria di backup.



Systemd

Systemd è un demone e un gestore di servizi che contiene varie utilità per gestire i processi di sistema e i componenti del sistema operativo. Nella sua forma semplicistica, viene in genere utilizzato per avviare e terminare i servizi in un nuovo ciclo di avvio.

Systemd può essere utilizzato per avviare automaticamente un'app o eseguire uno script al nuovo avvio. Per creare la stessa notifica di promemoria di backup spiegata sopra, devi prima creare le cartelle e il file richiesti eseguendo i comandi seguenti:

$mkdir -P~/.config/sistema/utente
$nano~/.config/sistema/utente/backup_reminder.service

Sostituisci nano con il comando del tuo editor di testo preferito. Sostituisci backup_reminder con qualsiasi altro nome che preferisci.

Incolla il codice seguente nel file backup_reminder.service creato utilizzando il comando sopra.

[Unità]
Description=Invia un promemoria di backup ad ogni riavvio
PartOf=session-grafica.target

[Servizio]
ExecStart=bash -c 'sonno 10; notifica-invia 'Esegui un backup''
Tipo=oneshot

[Installare]
WantedBy=session-grafica.target

Il codice sopra è piuttosto semplice. Invia una notifica Make a Backup 10 secondi dopo il caricamento della sessione grafica (una volta ogni riavvio o accesso).

Esegui i comandi seguenti per abilitare il servizio in modo che possa essere eseguito automaticamente ad ogni riavvio.

$chmod 644~/.config/sistema/utente/backup_reminder.service
$ systemctl--utente abilitarebackup_reminder.service
$ systemctl--utentedemone-ricarica
$ reboot

Questo è solo un semplice esempio di esecuzione di un comando di base all'avvio utilizzando systemd. Puoi anche creare servizi avanzati con più condizioni e più comandi. Per ulteriori informazioni, fare riferimento alla pagina man di systemd eseguendo il comando seguente:

$uomosistema

Tieni presente che questo esempio spiega la creazione di un nuovo servizio che non richiede l'accesso come root ed è adatto per l'avvio automatico di app che non richiedono i permessi di root. Se si desidera avviare automaticamente gli script che richiedono l'accesso come root, è necessario creare un nuovo servizio systemd nella directory /etc/systemd/system anziché nella cartella ~/.config/systemd/user e omettere l'opzione –user nei comandi sopra menzionati.

Cron Job

Cron è uno strumento in grado di eseguire periodicamente attività pianificate in base alle condizioni specificate da un utente. Questi lavori pianificati vengono creati in Crontab in un formato predefinito. In termini semplici, Crontab dice a Cron quali lavori eseguire in quale momento.

Come systemd, i lavori crontab possono essere utilizzati per avviare app ed eseguire script automaticamente all'avvio. Per aggiungere un nuovo cron job, esegui il comando seguente:

$crontab-e

Aggiungi le seguenti righe alla fine del file di testo (avvia automaticamente il terminale GNOME ad ogni riavvio):

SHELL=/bin/bash
@reboot sleep 30 && DISPLAY=:0 gnome-terminal

Puoi usare il tuo comando o fornire il percorso completo a uno script di shell.

Nota che a differenza di systemd, cron non può rilevare se la sessione grafica è stata caricata o meno. Devi specificare un periodo di attesa stimato fino al caricamento del server X e un identificatore di visualizzazione. Puoi conoscere il tuo ID display eseguendo il comando seguente:

$buttato fuori $DISPLAY

Il ritardo prima dell'esecuzione del comando o dello script dipende dalla configurazione del sistema e dal tempo di avvio.

Rc.local

Un altro metodo per eseguire script e comandi all'avvio è utilizzare il file rc.local. Si noti che durante i miei test, non sono stato in grado di posticipare l'esecuzione dello script fino a quando la sessione grafica non fosse attiva. L'aggiunta di qualsiasi ritardo del sonno comporta un ritardo nella visualizzazione della schermata di accesso stessa. Per questo motivo, non ho avuto successo nell'esecuzione di app grafiche all'avvio utilizzando il file rc.local. La modifica di rc.local richiede anche l'accesso come root, a differenza di tutti gli altri esempi spiegati sopra.

Per aggiungere comandi/script al file rc.local, eseguire il comando seguente (crea un nuovo file rc.local se non esiste):

$sudo nano /eccetera/rc.local

Aggiungi i tuoi comandi tra #! /bin/bash e exit 0 righe, come mostrato di seguito:

#! /bin/bash
percorso/a/mio_script.sh
esci 0

Rendi eseguibile il file rc.local eseguendo il comando seguente:

$sudo chmod+ x/eccetera/rc.local

Basta riavviare affinché lo script di avvio abbia effetto.

Conclusione

Questi sono alcuni metodi che possono essere utilizzati per eseguire automaticamente script e app all'avvio. Se stai cercando di eseguire script che non richiedono l'accesso root, ti consiglio di utilizzare l'app GUI delle applicazioni di avvio. Se desideri eseguire app e script con accesso root, ti suggerirei di creare un servizio systemd a livello di sistema.

Circa l'autore

Nitesh Kumar

Sono uno sviluppatore di software freelance e scrittore di contenuti che ama Linux, il software open source e la comunità del software libero.

Visualizza tutti i post