Come eseguire un programma Linux all'avvio con systemd

Una finestra terminale stilizzata su un laptop.

Fatmawati Achmad Zaenuri/Shutterstock



Hai bisogno di avviare un programma Linux all'avvio? Il software systemd fornisce un modo per farlo su qualsiasi Distribuzione Linux con systemd —che è la maggior parte di questi giorni, incluso Ubuntu. Ti guideremo attraverso il processo di creazione di un servizio integrato e parla anche con il diario.

Questo tutorial mostra come configurare un servizio di sistema che si avvia all'avvio del sistema. Per avviare un programma grafico quando accedi, usa invece il gestore di avvio del tuo desktop .





Esecuzione di programmi all'avvio

A volte il software che installi sul tuo computer si aggancia al processo di avvio di Linux, in modo che il programma venga lanciato automaticamente ogni volta che viene avviato il computer. Puoi facilmente ottenere questo stesso comportamento con i tuoi programmi e script, o in effetti qualsiasi altro programma che si trova sul tuo computer.

I programmi che vengono lanciati all'avvio sono controllati da |_+_|, il sistema e servizio gestore. |_+_| è il primo processo da eseguire all'avvio. Ha sempre ID processo (PID) 1. Ogni altro processo in esecuzione nel computer viene avviato da |_+_| o da un processo che |_+_| è già iniziato.



Vengono chiamati i programmi che vengono eseguiti in background demoni o servizi. La d alla fine di |_+_| sta per demone. In questo articolo, creeremo un servizio di esempio. Per spuntare tutte le caselle, il nostro servizio deve essere:

  • Integrato con |_+_| tramite un file dell'unità di servizio
  • Lanciato all'avvio
  • Controllabile usando |_+_|, il interfaccia di controllo per |_+_|
  • In grado di scrivere al diario

Creazione del programma di servizio

Abbiamo bisogno di un programma che |_+_| lancerà. Creeremo un semplice script, chiamato htg.sh. Questo tutorial utilizza l'editor di testo Gedit, ma puoi utilizzare qualsiasi editor di testo che preferisci.

systemd systemd



Annuncio pubblicitario

Il |_+_| si aprirà l'editor. Copia e incolla il seguente testo nell'editor.

systemd

Salva le modifiche e chiudi l'editor.

Script htg.sh nell

La sceneggiatura non fa molto, ma ci sono alcuni punti che vale la pena notare.

  • I due |_+_| le linee sono convogliate attraverso |_+_|, un programma che prende il l'output di un programma e lo invia al journal . Le voci sulla rivista hanno la priorità. Stiamo usando |_+_| (prioritario) per indicare che i nostri messaggi sono solo a scopo informativo (info). Non sono errori importanti o avvisi.
  • C'è un infinito |_+_| ciclo continuo.
  • Il |_+_| variabile è impostata sulla data e l'ora correnti. Questo viene formattato in un messaggio e inviato al journal.
  • Lo script quindi dorme per 60 secondi.
  • Dopo 60 secondi il ciclo viene ripetuto. Quindi, questo script scrive un messaggio con timestamp nel journal una volta al minuto.

Copiamo lo script in |_+_| directory.

systemd

E dobbiamo renderlo eseguibile:

systemd

Creazione del file dell'unità di servizio

Ogni programma avviato da |_+_| ha un file di definizione, chiamato file di unità di servizio. Questo contiene alcuni attributi che |_+_| può utilizzare per individuare e avviare il programma e per definire alcuni dei suoi comportamenti.

Dobbiamo creare un file di unità per il nostro nuovo servizio, ma è prudente assicurarci che nessuno dei file di unità esistenti abbia il nome che vogliamo dare al nostro nuovo servizio.

systemd

È possibile scorrere l'elenco dei file di unità, che è ordinato in ordine alfabetico, e verificare che il nome che si desidera utilizzare non sia stato preso.

Annuncio pubblicitario

Il nostro servizio si chiamerà htg.service. Nessun file di unità ha quel nome, quindi possiamo procedere e creare il nostro file di unità.

systemctl

Il |_+_| si aprirà l'editor. Copia e incolla il seguente testo nell'editor:

systemd

Salva le modifiche e chiudi l'editor.

htg.service unit file nell

Le voci hanno questi significati. Queste sono voci tipiche. Il nostro semplice servizio in realtà non ha bisogno della maggior parte di essi, ma includerli ci consente di spiegarli.

    Descrizione:Questa è una descrizione testuale del tuo servizio. Vuole:Il nostro servizio vuole, ma non richiede, che la rete sia attiva prima che il nostro servizio venga avviato. A seguito di:Un elenco di nomi di unità che dovrebbero essere avviati dopo che questo servizio è stato avviato con successo, se non sono già in esecuzione. Tipo:Semplice. |_+_| considererà questo servizio avviato non appena il processo specificato da |_+_| è stato biforcato. ExecStart:Il percorso per il processo che dovrebbe essere avviato. Ricomincia:Quando e se il servizio deve essere riavviato. L'abbiamo impostato su on-failure. RiavviaSec:Quanto tempo aspettare prima di tentare di riavviare il servizio. Questo valore è in secondi. KillModalità:Definisce come |_+_| dovrebbe terminare il processo se chiediamo |_+_| per interrompere il servizio. Abbiamo questo set da elaborare. Ciò causa |_+_| usare il |_+_| segnale solo sul processo principale. Se il nostro servizio fosse un programma non banale invece di un semplice script, lo imposteremmo su misto per garantire che anche tutti i processi generati vengano terminati. RicercatoDa:Abbiamo impostato questo su multi-user.target, il che significa che il servizio dovrebbe essere avviato finché il sistema è in uno stato in cui più utenti possono accedere, indipendentemente dal fatto che sia disponibile o meno un'interfaccia utente grafica.

Il file di unità non deve essere eseguibile, ma le autorizzazioni sul file di unità dovrebbero limitare chi può modificarlo. Non vuoi che un utente maligno o dispettoso modifichi il file dell'unità in modo che esegua un programma completamente diverso.

Questo comando darà al proprietario i permessi di lettura e scrittura e i permessi di lettura al gruppo. Gli altri non avranno permessi.

systemd

Possiamo avere |_+_| controlla la sintassi del nostro file unit per noi, anche se il servizio non è ancora in esecuzione. Eventuali errori verranno segnalati. (In realtà, la parte .service è facoltativa per la maggior parte dei comandi.)

gedit

Annuncio pubblicitario

Nessun errore è evidenziato, il che significa che il nostro file di unità è sintatticamente corretto.

Avvio del servizio

Quando aggiungi un nuovo file di unità o ne modifichi uno esistente, devi dire |_+_| per ricaricare le definizioni dei file di unità.

echo

Se vuoi che un servizio venga lanciato all'avvio devi abilitare esso:

systemd-cat

L'abilitazione di un servizio non lo avvia, lo imposta solo per l'avvio all'avvio. Per avviare il servizio Ora , devi usare |_+_| con il |_+_| opzione.

-p

Verifica del servizio

Dopo aver avviato manualmente il servizio o dopo aver riavviato il computer, possiamo verificare che il nostro servizio funzioni correttamente.

while

Lo stato del servizio viene visualizzato per noi.

Stato di htg.service in una finestra di terminale

  • Il punto verde indica che il nostro servizio è attivo e funzionante.
  • Il nome del servizio è htg.service e la descrizione lunga è quella che abbiamo fornito nel file di unità.
  • Ci viene mostrato quale file di unità è stato caricato /etc/systemd/system/htg.service.
  • Il servizio è attivo e l'ora in cui è stato lanciato è indicata per noi.
  • Il suo PID è 7762.
  • Ci sono due attività associate al servizio.
  • Un totale di 928 kibibyte di memoria sono utilizzati dal servizio.
  • Il gruppo di controllo include lo script htg.sh e |_+_| comando, che è stato lanciato da htg.sh. Il più delle volte, il |_+_| comando farà il lavoro per questo servizio.

Ci vengono anche mostrate le ultime 10 voci di diario prodotte da questo servizio. Non sorprende che siano tutti a un minuto di distanza.

Arresto e disabilitazione del servizio

Se devi interrompere il servizio, puoi farlo con questo comando:

TIMESTAMP

Annuncio pubblicitario

Ciò interrompe il servizio, ma non impedisce il riavvio successivo al riavvio del computer. Per interrompere l'avvio del servizio all'avvio, è necessario disattivare esso:

/usr/local/bin

Se il servizio è in esecuzione, questo comando non lo interrompe. Dice semplicemente |_+_| di non avviare il servizio al prossimo riavvio.

Se vuoi interrompere il servizio e impedirne l'avvio all'avvio, usa entrambi i comandi.

Consiglio di servizio

Assicurati che il tuo programma funzioni come previsto prima di provare ad avviarlo come servizio.

Comandi Linux
File catrame · pv · gatto · tac · chmod · presa · differenza · sed · Con · uomo · spinto · popd · fsck · testdisk · seguito · fd · pandoc · cd · $PATH · awk · giuntura · jq · piega · unico · journalctl · coda · stato · ls · fstab · buttato fuori · meno · chgrp · chown · rev · Guarda · stringhe · genere · rinominare · cerniera lampo · decomprimere · montare · smontare · installare · fdisk · mkfs · rm · rmdir · rsync · df · gpg · noi · nano · mkdir · a partire dal · ln · toppa · convertire · rclone · brandello · SRM
Processi alias · schermo · superiore · Bello · renice · progresso · strace · sistema · tmux · chsh · storia · in · lotto · libero · quale · dmesg · usermod · ps · chroot · xargs · tty · mignolo · lsof · vmstat · tempo scaduto · parete · · uccisione · dormire · sudo · il suo · volta · gruppoaggiungi · usermod · gruppi · lshw · spegnimento · riavviare · fermare · spegni · passwd · lscpu · crontab · Data · bg · fg
Rete netstat · ping · traceroute · ip · ss · chi è · fail2ban · bmon · voi · dito · nmap · ftp · arricciare · wget · chi · chi sono · In · iptables · ssh-keygen · ufw

IMPARENTATO: I migliori laptop Linux per sviluppatori e appassionati

LEGGI SUCCESSIVO Foto del profilo di Dave McKay Dave McKay
Dave McKay ha usato per la prima volta i computer quando era in voga il nastro di carta perforata, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come Data Protection Officer. I suoi scritti sono stati pubblicati da howtogeek.com, cloudavvyit.com, itenterpriser.com e opensource.com. Dave è un evangelista di Linux e un sostenitore dell'open source.
Leggi la biografia completa

Articoli Interessanti