Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Linux: eseguire automaticamente comandi all'avvio

Linux: scopriamo come eseguire automaticamente qualunque comando da terminale all'avvio del sistema operativo
Linux: scopriamo come eseguire automaticamente qualunque comando da terminale all'avvio del sistema operativo
Link copiato negli appunti

In alcuni casi, quando si lavora su una distribuzione Linux può essere utile lanciare un comando automaticamente all'avvio del sistema operativo. Questa operazione, relativamente semplice da portare a termine, rende più pratica la nostra esperienza d'uso con le applicazioni a cui facciamo ricorso più di frequentemente. Per accedere ad esse, infatti, non saremo più costretti ad aprire ogni volta il Terminale e lanciare sempre la stessa istruzione. Essa verrà eseguita dopo il boot dell'OS, senza alcun intervento da parte nostra.

Un caso pratico: avviare un'applicazione su Linux Ubuntu

Alcuni giorni fa un cliente che utilizza Archimista, un'applicazione open source per la gestione da browser web degli archivi storici digitalizzati, mi ha chiesto se fosse possibile lanciarla all'avvio del sistema. Nello specifico parliamo di una macchina virtuale Ubuntu in esecuzione su Oracle Virtualbox appositamente ottimizzata per l'installazione di Archimista, il software per il caricamento dei documenti digitalizzati, e Archivista, il client che permette di consultare gli archivi creati tramite il primo. Entrambi basati su Rails.

Si tratta di una richiesta più che legittima quando formulata da un utente non abituato all'utilizzo della riga di comando. Per facilitargli la vita e il lavoro ho quindi raccolto le informazioni riguardanti la procedura necessaria per il lancio di Archimista. Essa richiede innanzitutto di cliccare con il tasto destro del mouse su un collegamento all'omonima cartella presente sulla "Scrivania" di Ubuntu, per poi selezionare "Apri nel terminale". Fatto questo si deve digitare e inviare il comando:

rails server -e production

Quindi ecco il piccolo problema da risolvere: eseguire automaticamente all'avvio del sistema un comando che apra il terminale e dalla cartella di Archimista lanci il comando per l'avvio del web server che consente di accedere all'applicazione. La procedura che segue è stata poi utilizzata anche per lanciare in automatico al boot il comando necessario ad avviare il cliente Archivista. Chiaramente la medesima operazione è valida per qualsiasi altro comando da Terminale su Linux.

Sintassi del comando

Partiamo subito con l'istruzione che dovrà essere eseguita all'avvio di Ubuntu, nello specifico la seguente:

gnome-terminal -- bash -c "cd ~/Scrivania/archimista && rails server -e production"

gnome-terminal -- bash -c viene utilizzato in Linux per aprire un nuovo terminale GNOME e richiedere l'esecuzione di un'istruzione. gnome-terminal avvia infatti il terminale, -- indica a gnome-terminal che tutto ciò che segue è destinato al programma da eseguire (in questo caso bash), mentre bash -c lancia una shell Bash e utilizza l'opzione -c che serve per eseguire un comando passato come stringa.

Se per esempio volessimo aprire un nuovo terminale e stampare il messaggio "Hello, World!" potremmo farlo con il comando:

gnome-terminal -- bash -c "echo 'Hello, World!'; exec bash"

Per quanto riguarda invece la parte "cd ~/Scrivania/archimista && rails server -e production", il suo scopo è abbastanza chiaro. Con essa ci si sposta nella cartella dell'applicazione e si lancia il comando per avviarla. È comunque utile notare l'uso dell'operatore && che concatena il primo comando (cd ~/Scrivania/archimista) e il secondo (rails server -e production). Fa inoltre in modo che quest'ultimo venga eseguito solo se il primo ha successo.

Creazione dello script di avvio

Ora che conosciamo tutti i comandi da utilizzare e li abbiamo raccolti in una singola istruzione, possiamo procedere con la creazione di uno script di avvio da salvare nella nostra directory personale. Apriamo quindi il Terminale di Linux e richiamiamo l'editor nano per generare e modificare un nuovo file .sh. Nel nostro esempio abbiamo deciso di chiamarlo avvia_archivio.sh ma il nome, estensione a parte, non è vincolante per il suo funzionamento.

nano ~/avvia_archivio.sh

Fatto questo è possibile scrivere il contenuto dello script che sarà:

#!/bin/bash
gnome-terminal -- bash -c "cd ~/Scrivania/archimista && rails server -e production"

Per salvare il tutto non si deve fare altro premere la combinazione di tasti CTRL+O, poi Invio e chiudere il file con CTRL+X.

Volendo, se lo si ritiene necessario è possibile determinare un delay, ad esempio di 2 secondi prima del lancio dell'istruzione, utilizzando il comando sleep in questo modo:

#!/bin/bash
sleep 2
gnome-terminal -- bash -c "cd ~/Scrivania/archimista && rails server -e production"

sleep stabilisce infatti un tempo di attesa prima di procedere con l'esecuzione dello script.

Una volta creato, lo script dovrà essere eseguibile. Per far questo il comando da utilizzare nel nostro caso è:

chmod +x ~/avvia_archivio.sh

Dove con l'argomento x determiniamo appunto il permesso di esecuzione nel sistema corrente.

Aggiungere lo script alle applicazioni di avvio di Linux

Il nostro lavoro è quasi terminato. Ora abbiamo lo script da lanciare all'avvio di Linux Ubuntu e dobbiamo aggiungerlo alle applicazioni che vengono eseguite al boot. Premiamo quindi la combinazione di tasti Alt+F2. Si aprirà una finestra dove ci verrà richiesto di inserire un comando, quello che dobbiamo digitare è gnome-session-properties seguito da un Invio.

Nella finestra successiva clicchiamo su "Aggiungi" e diamo un nome al nuovo programma di avvio, ad esempio "Avvia Archivio". In corrispondenza del campo "Comando" inseriamo invece il percorso al file del nostro script. Abbiamo a disposizione anche un ulteriore campo, "Commento", che è opzionale è permette di descrivere la finalità del programma.

Ora, una volta cliccato il pulsante "Aggiungi" il nuovo programma d'avvio sarà pronto all'uso. È comunque possibile testarlo da subito manualmente lanciando, sempre da Terminale, la seguente istruzione:

~/avvia_archivio.sh

Se tutto dovesse andare come previsto si dovrebbe ottenere l'effetto desiderato. Quindi l'apertura di un nuovo Terminale e il lancio del comando per l'avvio dell'applicazione (o meglio, in questo caso, del web server che ne permette il funzionamento).

Non rimarrà quindi altro da fare se non riavviare il sistema e avere una controprova del buon esito dell'operazione.

Conclusioni

Almeno in linea teorica, la procedura esposta permette di creare un numero illimitato di programmi di avvio per il nostro sistema Linux. È comunque buona norma evitare di intasare la fase di boot con una quantità eccessiva di script, limitandosi a quelli strettamente necessari per evitare di dover eseguire manualmente le operazioni più frequenti e ripetitive. I programmi di avvio potrebbero generare infatti dei conflitti tra loro e, se così fosse, invece della comodità di avere più processi lanciati in automatico otterremo semplicemente dei problemi in fase di boot da risolvere.

Ti consigliamo anche