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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Riga 63: Riga 63:
exit 0
exit 0
</pre>
</pre>
=update-rc.d=
=<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 /etc/rcN.d
# 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 update-rc.d  
# si utilizza il più comodo comando <code>update-rc.d</code>
Io consiglio fortemente di scegliere la seconda strada.<br>
Io consiglio fortemente di scegliere la seconda strada.<br>
Innanzitutto rendiamo eseguibile il nostro script:
Innanzitutto rendiamo eseguibile il nostro script:
Riga 77: Riga 77:
</pre>
</pre>
dove:
dove:
* <nome_script_in_init.d> nel nostro caso è mio_script_start.sh
* <code><nome_script_in_init.d></code> nel nostro caso è <code>mio_script_start.sh</code>;
* <priorità_start> il numero di sequenza che decide l'ordine con cui eseguire lo script quando va avviato
* <code><priorità_start></code> il numero di sequenza che decide l'ordine con cui eseguire lo script quando va avviato;
* <priorità_stop> il numero di sequenza che decide l'ordine con cui eseguire lo script quando va stoppato  
* <code><priorità_stop></code> il numero di sequenza che decide l'ordine con cui eseguire lo script quando va stoppato.
Ad esempio:
Ad esempio:
<pre>
<pre>
Riga 95: Riga 95:
/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 sull'argomento priorità di avvio, il mio consiglio è di usare l'opzione "defaults"; in questo modo sarà la nostra Debian ada 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.
<pre>
<pre>
# update-rc.d mio_script_start.sh defaults
# update-rc.d mio_script_start.sh defaults
</pre>
</pre>
=Eliminazione di un servizio=
=Eliminazione di un servizio=
Nel caso in cui il nostro servizio <tt>mio_script_start.sh</tt> non dovesse più esserci utile dobbiamo rimuoverlo dalla directory init:
Nel caso in cui il nostro servizio <tt>mio_script_start.sh</tt> non dovesse più esserci utile dobbiamo rimuoverlo dalla directory init:

Versione delle 00:14, 21 gen 2010

Debian-swirl.png Versioni Compatibili

ERRORE: valore non valido ( Tutte le versioni di Debian )! Vedi qui.

Introduzione

La maggior parte dei servizi installati su un sistema Debian GNU/Linux viene avviata e fermata tramite un apposito script che si trova sotto la directory /etc/init.d/.
Ad esempio, per avviare il servizio MySQL occorre dare (come utente root) questo comando:

# /etc/init.d/mysql start

e per fermare il servizio

# /etc/init.d/mysql stop

Come si creano gli script di avvio

Per creare uno script di avvio per un servizio, è sufficiente creare un nuovo file sotto la directory /etc/init.d/ e poi editarlo con un qualsiasi editor di testi.
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:

#!/bin/sh

La selezione del comando da eseguire viene fatta attraverso un semplice case/esac di Bash.
Un esempio di script è riportato nel listato seguente:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          mio_start_script.sh
# Required-Start:    hal
# Required-Stop:     
# Should-Start:      
# Should-Stop:       
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Attivazione ottimizzazioni Notebook
# Description:       Attivazione ottimizzazioni Notebook
### END INIT INFO

case "$1" in
start)  echo "Attivo ottimizzazioni Notebook:"

        echo -e "\n1) abilito risparmio energetico per ac97"
        echo 1 > /sys/module/snd_ac97_codec/parameters/power_save

        echo -e "\n\n2) controllo se hdparm è installato correttamente"
        test -f /sbin/hdparm || exit 0

        echo -e "\n2.1) abilito il MultiCount16"
        hdparm -m16 /dev/hde
        echo -e "\n2.2) abilito l'accesso a 32 bit"
        hdparm -c3 /dev/hde
        echo -e "\n2.3) abilito il buffer a 2048"
        hdparm -a2048 /dev/hde
        ;;
stop)   echo "Non ancora implementato"
        ;;
restart) echo "Non ancora implementato"
        ;;
reload|force-reload) echo "Non ancora implementato"
        ;;
*)      echo "Usage: /etc/init.d/mio_start_script.sh {start|stop|restart|reload|force-reload}"
        exit 2
        ;;
esac
exit 0

update-rc.d

Una volta creato lo script bisogna renderlo automatico. Per automatizzare lo start e lo stop di un servizio si possono scegliere 2 strade:

  1. si creano i vari link simbolici per stoppare e far partire nelle rispettive directory /etc/rcN.d
  2. si utilizza il più comodo comando update-rc.d

Io consiglio fortemente di scegliere la seconda strada.
Innanzitutto rendiamo eseguibile il nostro script:

# chmod +x /etc/init.d/mio_start_script.sh

Quindi diamo il comando:

# update-rc.d <nome_script_in_init.d> default <priorità_start> <priorità_stop>

dove:

  • <nome_script_in_init.d> nel nostro caso è mio_script_start.sh;
  • <priorità_start> il numero di sequenza che decide l'ordine con cui eseguire lo script quando va avviato;
  • <priorità_stop> il numero di sequenza che decide l'ordine con cui eseguire lo script quando va stoppato.

Ad esempio:

# update-rc.d mio_script_start.sh 10 50

restituisce come output:

Adding system startup for /etc/init.d/mio_script_start.sh ...
/etc/rc0.d/K50mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc1.d/K50mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc6.d/K50mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc2.d/S10mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc3.d/S10mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc4.d/S10mio_script_start.sh -> ../init.d/mio_script_start.sh
/etc/rc5.d/S10mio_script_start.sh -> ../init.d/mio_script_start.sh

Se non volessimo addentrarci nell'argomento priorità di avvio, il mio consiglio è di usare l'opzione defaults; in questo modo sarà la nostra Debian ad assicurarsi che il servizio venga installato nei vari slot di priorità in maniera automatica.

# update-rc.d mio_script_start.sh defaults

Eliminazione di un servizio

Nel caso in cui il nostro servizio mio_script_start.sh non dovesse più esserci utile dobbiamo rimuoverlo dalla directory init:

# rm /etc/init.d/mio_script_start.sh

Dobbiamo però eliminare anche i relativi link simbolici (che non avrebbero più effetto), con il comando:

# update-rc.d -f mio_script_start.sh remove



Ferdybassi