Gestione e creazione di servizi in Debian

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
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