Questo articolo spiega come eseguire un comando o uno script all’avvio/avvio come root su Linux, in due modi: usando systemd o un cron job.
Come usare systemd per eseguire un comando o uno script come root all’avvio
Per utilizzare systemd per eseguire un comando o uno script come root all’avvio del computer, creare un file (come root) chiamato mycommand.service
(sostituire mycommand
con come vuoi chiamarlo) in /etc/systemd/system/
.
Possiamo usare l’editor di testo della riga di comando Nano per aprire / creare questo file:
sudo nano /etc/systemd/system/mycommand.service
In questo file, incolla quanto segue:
[Unit]Description=your description
[Service]ExecStart=/path/to/command/or/script
[Install]
WantedBy=multi-user.target
Ecco, cambia il Description
valore per descrivere cosa fa, e il ExecStart
valore al comando o al percorso dello script che si desidera eseguire come root all’avvio. Non aggiungere sudo
all’inizio del comando o dello script, perché viene comunque eseguito come root.
Ora salva il file ed esci da Nano. Se non hai familiarità con l’editor di testo Nano, puoi salvare il file premendo Ctrl + o
, poi Enter
. Uscire premendo Ctrl + x
.
Successivamente, è necessario abilitare il servizio systemd per l’esecuzione all’avvio, utilizzando il seguente comando:
sudo systemctl enable mycommand.service
Ricordati di sostituire mycommand.service
con il nome file effettivo che hai usato per questo file di servizio systemd. Non è necessario eseguire il servizio systemd in questo momento, poiché si tratta di eseguirlo all’avvio.
Se lo usi per eseguire uno script, assicurati di renderlo eseguibile (chmod +x /path/to/script
) altrimenti non verrà eseguito.
Questo è un file di unità systemd molto semplice che viene eseguito solo una volta. Questi possono essere molto più complessi, a seconda di ciò di cui hai bisogno. Ad esempio, potresti usare un comando che viene eseguito prima ExecStart
, farlo partire solo dopo che un’altra unità diventa attiva, far eseguire il comando solo dopo che un altro servizio, ad es. il servizio di rete è stato avviato (After=network.target
, dichiarando anche una dipendenza da questo servizio usando Wants=
o Requires=
), e altro ancora. Dai un’occhiata alle pagine man di systemd.service e systemd.unit per maggiori dettagli.
Potrebbe interessarti anche: Come avviare le applicazioni di avvio con un ritardo
Come utilizzare un cron job per eseguire un comando o uno script come root all’avvio/avvio
Per utilizzare un cron job per eseguire un comando o uno script come root all’avvio del sistema, modificare il crontab dell’utente root utilizzando:
sudo crontab -e
E nella parte inferiore del file (potrebbe anche essere vuoto), usa quanto segue:
@reboot /path/to/command/or/script
Ora salva il crontab ed esci. Se hai utilizzato l’editor della riga di comando Nano per modificarlo (dovrebbe essere l’impostazione predefinita nella maggior parte dei casi), puoi salvare il file premendo Ctrl + o
, poi Enter
. Uscire da Nano premendo Ctrl + x
. Non aggiungere sudo
prima del comando o dello script, perché viene comunque eseguito come root, poiché viene aggiunto al crontab di root.
Nel caso in cui desideri utilizzare un particolare editor per modificare il crontab di root, eseguilo in questo modo: sudo EDITOR=editor crontab -e
, ad esempio per Vim: sudo EDITOR=vim crontab -e
, o per Nano: sudo EDITOR=nano crontab -e
.
Alcune note a riguardo:
- Se lo usi per eseguire uno script, assicurati di renderlo eseguibile (
chmod +x /path/to/script
) altrimenti non funzionerà - Usa il percorso completo del comando o dello script, altrimenti potrebbe non essere eseguito (dipende dalla distribuzione Linux che stai utilizzando, ad esempio non è necessario utilizzare il percorso completo su Ubuntu 20.04)
- Se lo script eseguito da cron include anche comandi senza il percorso completo, puoi evitare di dover riscrivere lo script aggiungendo questo nella parte superiore del file crontab:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- Se hai bisogno di ritardare l’inizio del comando/script, puoi utilizzare il
sleep
comando, ad esempio:@reboot /usr/bin/sleep 60; /path/to/command/or/script
per eseguire il comando o lo script 60 secondi dopo l’avvio del sistema
Potrebbe interessarti anche: Come eseguire un comando dopo che il precedente è terminato su Linux
Quale scegliere tra systemd o un cron job per eseguire un comando o uno script come root all’avvio / avvio, se puoi scegliere? In caso di dubbio, scegli systemd (se è disponibile sul tuo sistema) perché dovrebbe essere più affidabile e più facile da usare.
Ad esempio, non tutte le versioni di cron supportano il @reboot
opzione, oppure il comando / script può essere eseguito solo quando il sistema viene riavviato e non quando viene spento (questo non è successo per me su Ubuntu 20.04, Fedora 24, Manjaro Linux e Debian 10, ma potrebbe succedere su alcuni Linux distribuzioni).
Vale anche la pena notare che @reboot
configura un lavoro da eseguire una volta all’avvio del demone. cron di solito non viene riavviato, quindi di solito corrisponde alla macchina che viene avviata. Ad esempio, Debian (e le distribuzioni Linux basate su Debian) lo applicano, rendendo cron non rieseguito @reboot
job al riavvio del servizio cron. Su alcune distribuzioni Linux, tuttavia, il riavvio del servizio cron potrebbe rieseguire il @reboot
comandi.
Inoltre, su Fedora, cron non è installato di default (installalo usando sudo dnf install cronie
). Su Manjaro, cron è installato per impostazione predefinita, ma non abilitato per impostazione predefinita (abilitalo usando sudo systemctl enable --now cronie
).
Potrebbe interessarti: Come trovare tutti i file contenenti testo specifico su Linux dalla riga di comando