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 loro in questi giorni, incluso Ubuntu. Ti guideremo attraverso la procedura di creazione di un servizio integrato, e anche parlare con la rivista.
Questo tutorial mostra come configurare un servizio di sistema che si avvia all'avvio del sistema. Per avviare un programma di grafica al login, usa il tuo gestore di avvio desktop.
Esecuzione di programmi all'avvio
Qualche volta, il software che installi sul tuo computer si aggancia alla procedura di avvio di Linux, quindi il programma si avvia automaticamente ogni volta che si avvia il computer. Puoi facilmente ottenere questo stesso comportamento con i tuoi programmi e script, o in realtà con qualsiasi altro programma che è sul tuo computer.
I programmi che vengono lanciati all'avvio sono controllati da systemd
, il sistema e servizio manager. systemd
è la prima procedura che viene eseguita all'avvio. ha sempre identificazione del processo (PID) 1. Tutti gli altri processi in esecuzione sul computer vengono avviati da systemd
, o con una procedura che systemd
è già iniziato.
Vengono chiamati i programmi che vengono eseguiti in background dannazione o servizi. Il “D” alla fine di systemd
significa daemon. In questo post, creeremo un servizio di esempio. Per selezionare tutte le caselle, il nostro servizio deve essere:
- Integrato con
systemd
tramite un file dell'unità di servizio - Lanciato all'avvio
- Controllabile usando
systemctl
, il interfaccia di controllo disystemd
- In grado di scrivere sulla rivista
Creazione del programma di servizio
Abbiamo bisogno di avere un programma che systemd
lo preparo io. Creeremo un semplice script, chiamato “htg.sh”. Questo tutorial utilizza l'editor di testo Gedit, ma è possibile utilizzare l'editor di testo di propria scelta.
htg.sh tattile
gedit htg.sh
il gedit
Si aprirà l'editor. Copiare e incollare il testo seguente nell'editor.
#!/bin/bash echo "htg.service: ## Avviamento ##" | systemd-cat -p info while : do TIMESTAMP=$(data '+%Y-%m-%d %H:%m:%S') eco "htg.service: Timestamp ${TIMESTAMP}" | systemd-cat -p info sleep 60 fatto
Salva le modifiche e chiudi l'editor.
Lo script non fa molto, ma ci sono alcuni punti che sono importanti da notare.
- Entrambi
echo
le linee sono incanalate attraversosystemd-cat
, un programma che prende il uscire da un programma e inviarlo al journal. Le voci del diario hanno la priorità. Stiamo usando il-p
Opzione (priorità) per indicare che i nostri messaggi sono solo a scopo informativo (Informazioni). Non sono errori o avvertimenti importanti. - C'è un infinito
while
cerchio. - il
TIMESTAMP
La variabile è impostata sulla data e l'ora correnti. Questo è formattato in un messaggio e inviato alla rivista. - Dopo, lo script dorme per 60 secondi.
- Dopo 60 secondi, il ciclo si ripete. Perché, questo script scrive un messaggio con data e ora al diario una volta al minuto.
Copiamo lo script in /usr/local/bin
directory.
sudo cp htg.sh /usr/local/bin
E dobbiamo renderlo eseguibile:
sudo chmod +x /usr/local/bin/htg.sh
Creazione del file dell'unità di servizio
Ogni programma avviato da systemd
ha un file di definizione, chiamato file dell'unità di servizio. Questo ha alcuni attributi che systemd
è possibile utilizzare per individuare e avviare il programma, e per stabilire parte del loro comportamento.
Dobbiamo creare un file unitario per il nostro nuovo servizio, ma è saggio assicurarsi che nessuno dei file di unità esistenti abbia il nome che vogliamo dare al nostro nuovo servizio.
sudo systemctl list-unit-files --type-service
È possibile scorrere l'elenco dei file dell'unità, che è in ordine alfabetico, e controlla che il nome che vuoi usare non sia usato.
Il nostro servizio sarà chiamato “htg.service”. Nessun file di unità ha quel nome, in modo che possiamo andare avanti e creare il nostro file di unità.
sudo gedit /etc/systemd/system/htg.service
il gedit
Si aprirà l'editor. Copiare e incollare il testo seguente nell'editor:
[Unità] Description=How-To Geek Service Example Wants=network.target After=syslog.target network-online.target [Servizio] Type=simple ExecStart=/usr/local/bin/htg.sh Restart=on-failure RestartSec=10 KillMode=process [Installare] WantedBy=multi-user.target
Salva le modifiche e chiudi l'editor.
Le voci hanno questi significati. Queste sono voci tipiche. Il nostro semplice servizio non ha davvero bisogno della maggior parte di loro, ma includerli ci permette di spiegarli.
- Descrizione: Questa è una descrizione testuale del tuo servizio.
- Vuole: Il nostro servizio vuole, ma non hai bisogno, che la rete sia attivata prima dell'inizio del nostro servizio.
- Dopo: Un elenco di nomi di unità che devono essere avviati dopo che questo servizio è stato avviato con successo, se non sono ancora in esecuzione.
- scrive: Semplice.
systemd
considererà questo servizio avviato non appena la procedura specificata daExecStart
ha biforcato. - ExecStart: Il percorso verso la procedura da avviare.
- Ricomincia: Quando e se il servizio deve essere riavviato. Lo abbiamo configurato in “in caso di guasto”.
- RiavviaSec: Quanto tempo aspettare prima di provare a riavviare il servizio. Questo valore è in secondi.
- KillMode: Impostato come
systemd
dovrebbe uccidere la procedura se lo chiediamosystemctl
per interrompere il servizio. Abbiamo questo set up per “processo”. Questo causasystemd
utilizzare ilSIGTERM
segnale solo nella procedura principale. Se il nostro servizio fosse un programma non banale invece di un semplice script, lo configureremmo come “misto” per assicurarsi che anche tutti i processi generati siano terminati. - Ricercato per: Abbiamo questa impostazione in "multi-user.target", il che significa che il servizio dovrebbe avviarsi ogni volta che il sistema si trova in uno stato in cui più utenti possono accedere, se è disponibile o meno un'interfaccia utente grafica.
Non è necessario che il file dell'unità sia eseguibile, ma le autorizzazioni sul file dell'unità dovrebbero limitare chi può modificarlo. Non vuoi che un utente malintenzionato o malintenzionato modifichi il file sull'unità in modo che esegua un programma completamente diverso.
Questo comando darà al proprietario i permessi di lettura e scrittura, e leggi i permessi per il gruppo. Altri non avranno i permessi.
sudo chmod 640 /etc/systemd/system/htg.service
Possiamo avere systemctl
controlla la sintassi del nostro file unit per noi, anche se il servizio non è ancora attivo. Eventuali errori verranno segnalati. (In realtà, la parte “.servizio” è facoltativo per la maggior parte dei comandi).
stato systemctl htg.service
Gli errori non sono evidenziati, il che significa che il nostro file di unità è sintatticamente corretto.
Avvia il servizio
Quando aggiungi un nuovo file di unità o ne modifichi uno esistente, deve informare systemd
per ricaricare le definizioni dal file dell'unità.
sudo systemctl demone-reload
Se vuoi che un servizio venga lanciato all'avvio, deve abilitare Quello:
sudo systemctl abilita htg
L'abilitazione di un servizio non lo avvia, basta impostarlo per l'avvio all'avvio. Per avviare il servizio Ora, devi usare systemctl
con il start
opzione.
sudo systemctl start htg
Verifica del servizio
Dopo aver avviato manualmente il servizio o dopo aver riavviato il computer, possiamo verificare che il nostro servizio funzioni correttamente.
sudo systemctl status htg.service
Viene mostrato lo stato del servizio.
- Il punto verde indica che il nostro servizio sta funzionando senza intoppi.
- Il nome del servizio è "htg.service", e la descrizione lunga è quella che forniamo nel file dell'unità.
- Ci viene mostrato quale file di unità è stato caricato “/etc/systemd/system/htg.service”.
- Il servizio è attivo e viene indicata l'ora in cui è stato lanciato.
- Il tuo PID è 7762.
- Ci sono due compiti associati al servizio.
- Un totale di 928 Kibibyte di Memoria sono utilizzati dal servizio.
- Il gruppo di controllo include lo script “htg.sh” e il
sleep
comando, che è stato rilasciato da “htg.sh”. La maggior parte delle volte,sleep
comando farà il lavoro per questo servizio.
Inoltre, l'ultima 10 voci di diario prodotte da questo servizio. Come potremmo aspettare?, tutti sono separati da un minuto.
Arresto e disattivazione del servizio
Se devi interrompere il servizio, puoi farlo con questo comando:
sudo systemctl stop htg.service
Questo interrompe il servizio, ma non impedisce il riavvio al successivo riavvio del computer. Per interrompere l'avvio del servizio all'avvio, deve disattivare Quello:
sudo systemctl disabilita htg.service
Se il servizio è in esecuzione, questo comando non lo ferma. dì solo systemd
per non avviare il servizio al prossimo riavvio.
Se vuoi interrompere il servizio e impedirne l'avvio durante l'avvio, usa entrambi i comandi.
Consiglio di servizio
Assicurati che il tuo programma funzioni come previsto prima di provare a eseguirlo come servizio.