Gestione e creazione di servizi in Debian: differenze tra le versioni

m
verificata, compatibile per tutte le versioni
(estesa e verificata per Jessie)
m (verificata, compatibile per tutte le versioni)
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
{{Versioni compatibili}}
== Introduzione ==
== Introduzione ==
La maggior parte dei servizi installati su un sistema Debian GNU/Linux storicamente viene avviata e fermata tramite un apposito script che si trovava sotto la directory <code>/etc/init.d/</code>. A partire da Debian 8 ([[Jessie]]) questo sistema di init è stato sostituito di default da [[systemd]], che ha una nuova sintassi e nuovi percorsi per i propri file di configurazione, e non richiede più nemmeno l'impiego di script.
La maggior parte dei servizi installati su un sistema Debian GNU/Linux storicamente viene avviata e fermata tramite un apposito script che si trovava sotto la directory <code>/etc/init.d/</code>, tramite il sistema di init [[SysV]]. A partire da Debian 8 ([[Jessie]]) questo sistema è stato sostituito di default da [[systemd]], che ha una nuova sintassi e nuovi percorsi per i propri file di configurazione, e non richiede più nemmeno l'impiego di script.


Systemd è tuttavia in grado di comprenderne la sintassi, purché non ci siano servizi di systemd con lo stesso nome che nasconderebbero gli script presenti in <code>/etc/init.d/</code>, e di eseguirli all'avvio come avveniva in precedenza, secondo le dipendenze indicate in forma di commento nell'intestazione dello script.
Systemd è tuttavia in grado di comprenderne la sintassi, purché non ci siano servizi di systemd con lo stesso nome che nasconderebbero gli script presenti in <code>/etc/init.d/</code>, e di eseguirli all'avvio come avveniva in precedenza, secondo le dipendenze indicate in forma di commento nell'intestazione dello script.
Riga 17: Riga 17:


== Come si creano gli script di avvio ==
== Come si creano gli script di avvio ==
{{Suggerimento | Se si è interessati soltanto a eseguire dei comandi dopo che il sistema e i servizi sono stati avviati, senza lanciare qualcosa che resti in esecuzione, è sufficiente modificare il file <code>/etc/rc.local</code>, aggiungendo lì i propri comandi.}}
{{Suggerimento | Se si è interessati soltanto a eseguire dei comandi dopo che il sistema e i servizi sono stati avviati, senza lanciare qualcosa che resti in esecuzione, è sufficiente modificare il file <code>/etc/rc.local</code>, aggiungendo lì i propri comandi. Il file andrà creato se non esiste, e reso eseguibile.}}


Per creare uno script di avvio per un servizio, è sufficiente creare un nuovo file sotto la directory <code>/etc/init.d/</code> e poi editarlo con un qualsiasi editor di testi.
Per creare uno script di avvio per un servizio, è sufficiente creare un nuovo file sotto la directory <code>/etc/init.d/</code> e poi editarlo con un qualsiasi editor di testi.
Riga 42: Riga 42:
# Default-Start:    2 3 4 5
# Default-Start:    2 3 4 5
# Default-Stop:      0 1 6
# Default-Stop:      0 1 6
# Short-Description: Attivazione ottimizzazioni Notebook
# Short-Description: Ottimizzazioni Notebook
# Description:      Attivazione ottimizzazioni Notebook
# Description:      Attivazione ottimizzazioni Notebook personalizzate
### END INIT INFO
### END INIT INFO


Riga 80: Riga 80:
</pre>
</pre>


== <code>systemctl</code> ==
== Installare lo script ==
 
=== Con <code>systemctl</code> ('''systemd''') ===
Con systemd è sufficiente abilitare lo script:
Con systemd è sufficiente abilitare lo script:
<pre>
<pre>
# systemctl mio_start_script.sh enable
# systemctl enable mio_start_script.sh
</pre>
</pre>


== <code>update-rc.d</code> ==
=== Con <code>update-rc.d</code> ===
Una volta creato lo script bisogna renderlo automatico. Per automatizzare lo start e lo stop di un servizio si possono scegliere 2 strade:
Una volta creato lo script bisogna renderlo automatico. Per automatizzare lo start e lo stop di un servizio si possono scegliere 2 strade:
# si creano i vari link simbolici per stoppare e far partire nelle rispettive directory <code>/etc/rcN.d</code>
# si creano i vari link simbolici per stoppare e far partire nelle rispettive directory <code>/etc/rcN.d</code>
# si utilizza il più comodo comando <code>update-rc.d</code>
# si utilizza il più comodo comando <code>update-rc.d</code>, che è la forma consigliata (in caso si utilizzi <code>systemctl</code>, verrà sempre invocato questo comando)
# si applicano le informazioni sulle dipendenze e i runlevel scritte nell'intestazione, tramite il comando <code>insserv</code>
 
Quest'ultima strada è la migliore, in quanto assicura che l'intestazione sia corretta, mentre gli altri metodi, più manuali, possono avere inconsistenze tra la documentazione e l'applicazione. È anche la più semplice, basta eseguire:
<pre>
# insserv
</pr>


Nel caso si scelga invece la seconda strada, e quindi di discostarsi dall'intestazione dello script, si deve dare il comando:
Il comando da dare è quindi:
<pre>
<pre>
# update-rc.d <nome_script_in_init.d> default <priorità_start> <priorità_stop>
# update-rc.d <nome_script_in_init.d> default <priorità_start> <priorità_stop>
Riga 120: Riga 116:
/etc/rc5.d/S10mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc5.d/S10mio_script_start.sh -> ../init.d/mio_script_start.sh
</pre>
</pre>
Se non volessimo addentrarci nell'argomento priorità di avvio, il mio consiglio è di usare l'opzione <code>defaults</code>; in questo modo sarà la nostra Debian ad assicurarsi che il servizio venga installato nei vari slot di priorità in maniera automatica.
Se non volessimo addentrarci nell'argomento priorità di avvio, il mio consiglio è di usare l'opzione <code>defaults</code>; in questo modo sarà la nostra Debian ad assicurarsi che il servizio venga installato nei vari slot di priorità in maniera automatica, in base a quanto configurato nell'intestazione dello script.
<pre>
<pre>
# update-rc.d mio_script_start.sh defaults
# update-rc.d mio_script_start.sh defaults
Riga 128: Riga 124:
Nel caso in cui il nostro servizio <code>mio_script_start.sh</code> non dovesse più esserci utile, dobbiamo disabilitarlo.  
Nel caso in cui il nostro servizio <code>mio_script_start.sh</code> non dovesse più esserci utile, dobbiamo disabilitarlo.  


Con systemd:
Se si utilizza systemd è meglio prima disabilitare il servizio, mentre non è necessario altrimenti:
<pre>
<pre>
# systemctl disable mio_script_start.sh
# systemctl disable mio_script_start.sh
</pre>
</pre>


Mentre invece, senza systemd, si possono eliminare i relativi link simbolici (che non avrebbero più effetto), con il comando:
Sia con systemd sia senza, per eliminare i relativi link simbolici (che non avrebbero più effetto) creati nelle cartelle <code>/etc/rc?.d/</code>, si può usare il comando:
<pre>
<pre>
# update-rc.d -f mio_script_start.sh remove
# update-rc.d -f mio_script_start.sh remove
</pre>
</pre>


Infine, in entrambi i casi, possiamo rimuoverlo dalla directory <code>/etc/init.d</code> con:
Infine possiamo rimuovere lo script dalla directory <code>/etc/init.d</code> con:
<pre>
<pre>
# rm /etc/init.d/mio_script_start.sh
# rm /etc/init.d/mio_script_start.sh
Riga 148: Riga 144:
:[[Utente:HAL 9000|HAL 9000]]
:[[Utente:HAL 9000|HAL 9000]]
|Verificata_da=
|Verificata_da=
:[[Utente:HAL 9000|HAL 9000]] 18:41, 30 mag 2015 (CEST)
:[[Utente:HAL 9000|HAL 9000]] 10:32, 21 lug 2019 (CEST)
|Numero_revisori=1
|Numero_revisori=1
}}
}}
3 581

contributi