3 581
contributi
mNessun oggetto della modifica |
(estesa e verificata per Jessie) |
||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Squeeze|Wheezy}} | {{Versioni compatibili|Squeeze|Wheezy|Jessie}} | ||
== Introduzione == | == Introduzione == | ||
La maggior parte dei servizi installati su un sistema Debian GNU/Linux viene avviata e fermata tramite un apposito script che si | 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. | ||
Ad esempio, per avviare il servizio MySQL | |||
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. | |||
È possibile inoltre utilizzare il comando <code>service</code>, che si occuperà di invocare <code>systemctl</code> se systemd è attivo oppure di invocare lo script in <code>/etc/init.d/</code> in un ambiente pulito. | |||
Ad esempio, per avviare il servizio MySQL, è sufficiente con [[privilegi di amministrazione]] il seguente comando: | |||
<pre> | <pre> | ||
# | # service mysql start | ||
</pre> | </pre> | ||
e per fermare il servizio: | e per fermare il servizio: | ||
<pre> | <pre> | ||
# | # service mysql stop | ||
</pre> | </pre> | ||
== Come si creano gli script di avvio == | == Come si creano gli script di avvio == | ||
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.< | {{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.}} | ||
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. | |||
A partire da Debian 8 ([[Jessie]]), se si utilizza systemd, è necessario accertarsi prima che il nome non sia già utilizzato da un servizio di systemd, altrimenti sarà ignorato: | |||
<pre>$ systemctl status nome-script-da-creare</pre> | |||
Se il nome è libero questo comando restituirà un messaggio di errore che il file non esiste. | |||
Ogni script di avvio che si rispetti ha almeno una sezione nella quale controlla i parametri che gli sono stati passati e altre in cui si occupa poi di eseguire un diverso comando a seconda del parametro passato. | Ogni script di avvio che si rispetti ha almeno una sezione nella quale controlla i parametri che gli sono stati passati e altre in cui si occupa poi di eseguire un diverso comando a seconda del parametro passato. | ||
Come per ogni script, anche per questi bisogna indicare nella prima riga l'interprete che deve essere utilizzato per eseguirli, ad esempio: | Come per ogni script, anche per questi bisogna indicare nella prima riga l'interprete che deve essere utilizzato per eseguirli, ad esempio: | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
</pre> | </pre> | ||
La selezione del comando da eseguire viene fatta attraverso un semplice <code>case/esac</code> di Bash. | La selezione del comando da eseguire viene fatta attraverso un semplice <code>case/esac</code> di Bash. Un esempio di script è riportato nel listato seguente, che in questo caso è stato scritto nel file <code>/etc/init.d/mio_start_script.sh</code> | ||
Un esempio di script è riportato nel listato seguente | |||
<pre> | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
Riga 63: | Riga 74: | ||
exit 0 | exit 0 | ||
</pre> | </pre> | ||
Lo script andrà poi reso eseguibile con: | |||
<pre> | <pre> | ||
# | # chmod +x /etc/init.d/mio_start_script.sh | ||
</pre> | |||
== <code>systemctl</code> == | |||
Con systemd è sufficiente abilitare lo script: | |||
<pre> | |||
# systemctl mio_start_script.sh enable | |||
</pre> | </pre> | ||
Riga 94: | Riga 89: | ||
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> | ||
# 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> | <pre> | ||
# | # insserv | ||
</ | </pr> | ||
Nel caso si scelga invece la seconda strada, e quindi di discostarsi dall'intestazione dello script, si deve dare il comando: | |||
<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 129: | Riga 126: | ||
== Eliminazione di un servizio == | == Eliminazione di un servizio == | ||
Nel caso in cui il nostro servizio <code>mio_script_start.sh</code> non dovesse più esserci utile dobbiamo | Nel caso in cui il nostro servizio <code>mio_script_start.sh</code> non dovesse più esserci utile, dobbiamo disabilitarlo. | ||
Con systemd: | |||
<pre> | <pre> | ||
# | # 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: | |||
<pre> | <pre> | ||
# update-rc.d -f mio_script_start.sh remove | # update-rc.d -f mio_script_start.sh remove | ||
</pre> | |||
Infine, in entrambi i casi, possiamo rimuoverlo dalla directory <code>/etc/init.d</code> con: | |||
<pre> | |||
# rm /etc/init.d/mio_script_start.sh | |||
</pre> | </pre> | ||
{{Autori | {{Autori | ||
|Autore=[[Utente:Ferdybassi|Ferdybassi]] | |Autore=[[Utente:Ferdybassi|Ferdybassi]] | ||
|Estesa_da= | |||
:[[Utente:HAL 9000|HAL 9000]] | |||
|Verificata_da= | |||
:[[Utente:HAL 9000|HAL 9000]] 18:41, 30 mag 2015 (CEST) | |||
|Numero_revisori=1 | |||
}} | }} | ||
[[Categoria:Shell]] | [[Categoria:Shell]] | ||
[[Categoria:Ottimizzazione del sistema]] | [[Categoria:Ottimizzazione del sistema]] |
contributi