Howto Creare Script di Avvio su Debian

Da PtLUG Wiki.

Jump to: navigation, search

Contents

Introduzione

Come avrete notato, la maggior parte dei servizi che sono installati su un sistema Linux (in particolare su Debian) vengono avviati e fermati tramite un apposito script che si trova sotto la directory /etc/init.d/

Per avviare il servizio MySQL ad esempio occorre dare questo comando:

/etc/init.d/mysql start

e per fermare il servizio

/etc/init.d/mysql stop

Come si creano

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.

Come sono fatti

Ogni script di avvio che si rispetti, ha almeno una sezione nella quale controlla i parametri che gli sono stati passati e si occupa di eseguire un diverso comando a seconda appunto del parametro che gli è stato passato: start oppure stop ad esempio.

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 completo

Nel mio caso avevo bisogno di uno script che gestisse l'avvio dell'utility fan, avendo la necessità, ahimè, di tenere sempre accesa la ventolina del mio notebook. Qui sotto trovate l'esempio completo:

#!/bin/sh -e
#
# fan   manage the state of fan for Toshiba notebooks, using the 'fan' utility included in toshutils
#

case "$1" in
    start)
        /usr/bin/fan -n >&2
        /usr/bin/fan -d >&2
        ;;
    stop)
        killall -w fan >&2
        fan -f >&2
        ;;
    smart)
        /usr/bin/fan -n >&2
        /usr/bin/fan -s >&2
        ;;
    *)
        echo "Usage: $0 {start|stop|smart}" >&2
        exit 1
        ;;
esac

update-rc.d

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:
update-rc.d <nome_script_in_init.d> default <priorità_start> <priorità_stop>

dove:

  • <nome_script_in_init.d> nel nostro caso è fan;
  • <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.ok
# update-rc.d prova defaults 10 50
Adding system startup for /etc/init.d/prova ...
/etc/rc0.d/K50prova -> ../init.d/prova
/etc/rc1.d/K50prova -> ../init.d/prova
/etc/rc6.d/K50prova -> ../init.d/prova
/etc/rc2.d/S10prova -> ../init.d/prova
/etc/rc3.d/S10prova -> ../init.d/prova
/etc/rc4.d/S10prova -> ../init.d/prova
/etc/rc5.d/S10prova -> ../init.d/prova

Personal tools