Connect with us

Linux

Come eseguire un comando o uno script come root all’avvio / avvio utilizzando systemd o un lavoro Cron


Linux esegue comandi o script come root (sudo) all'avvio/avvio

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


Ti e piaciuto questo articolo?
Supporta il mio lavoro, facendo una donazione!

Click to comment

Leave a Reply

Esegui l'accesso per Commentare

Di tendenza

Close Popup
Questo sito utilizza i cookie per migliorare servizi ed esperienza dei lettori. Se decidi di continuare la navigazione senza blocchi premi su Accetto, oppure continua tranquillamente la navigazione, nessun dato sulla tua navigazione verrà raccolto.
Close Popup
Privacy Settings saved!
Impostazioni

Quando visiti un sito Web, esso può archiviare o recuperare informazioni sul tuo browser, principalmente sotto forma di cookies. Controlla qui i tuoi servizi di cookie personali.

Questi cookie sono necessari per il funzionamento del sito Web e non possono essere disattivati nei nostri sistemi.

Cookie tecnici
Per utilizzare questo sito web usiamo i seguenti cookie tecnici necessari:
  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec
  • swpm_session

Google Adsense
Usiamo la pubblicità di Google solo per mantenere attivi i nostro sito. Con ip anonimizzati.

Rifiuta tutti i Servizi
Save
Accetta tutti i Servizi