Capita a volte di avere un applicazione che deve partire in fase di avvio del sistema, e lo deve fare in un ben preciso momento.
Si potrebbe farlo facilmente mettendo in /home/utente/.kde/Autostart un semplice script di avvio, si però cosi facendo non abbiamo i "comandi" start, stop, restart, in più nessuno ci garantisce che ci sia il login all’utente giusto, per esempio dopo un blak-out.

Per ovviare a questi inconvenienti ci sarebbero molte opzioni, tutta via la più comoda affidabile ed elegante non che veramente funzionale, è quella che vi illustrerò tra poco con un esempio che credo sia la cosa più illuminante.

Forse ad alcuni potrà sembrare una cosa complicata, ma vi garantisco che una volta capito il meccanismo è una vera e propria manna dal cielo.

Iniziamo con l’esempio:

Supponiamo di avere un programma di nome "comunikator" che risiede in /usr/bin: questo nostro immaginario programma fa in modo che appena avviato il pc invia automaticamente un sms al cellulare per dire "son avviato" e ogni ora ne invia uno per dire "son ancora vivo" (programma di fantasia a titolo di esempio!!)

Ovviamente questo programma non può essere lanciato a caso durante il boot, ma solo dopo che la rete è stata configurata e questo è una cosa necessaria!

Come fare?

Andiamo in /etc/init.d e cerchiamo un file di nome "skeleton" , copiamolo da qualche parte e lo rinominiamo. Possiamo chiamarlo per esempio "com_sms" (ma qualsiasi nome va bene).

Ora lo apriamo con il nostro editor di testi, nel mio caso sarà Kate (non spaventatevi!!!) e cominciamo.

La prima cosa da fare è sostituire alcune parti: dove compare la stringa "FOO" inserire il nome del programma da avviare: nel nostro caso comunikator.

Per esempio:

# /etc/init.d/FOO

modificato prenderà questa forma:

# /etc/init.d/comunikator

(Modificate la riga indicata anche se è commantata; capirete in seguito l’utilità di tale operazione). Questa modifica va apportata OVUNQUE all’interno del file, quindi armatevi di pazienza e procedete.

Il prossimo passaggio è molto importante perchè indicherà al sistema quando avviare l’applicazione (comunikator) e su quale livello (init)  vogliamo che il programma debba agire. Nell’esempio sottostante potete vedere a sinitra la parte del file originale mentre a desta  la parte modificata modificato con commento:

### BEGIN INIT INFO
# Provides:          FOO                                          # Provides:          comunikator                    
# Required-Start:    $syslog $remote_fs                           # Required-Start:    $network (network deve partire)
# Should-Start: $time ypbind smtp                                 # Should-Start:  (bianco se nn avetealtri requisiti)
# Required-Stop:     $syslog $remote_fs                           # Required-Stop:     $syslog $remote_fs                                                   
# Should-Stop: $time ypbind smtp                                  # Should-Stop: $time ypbind smtp           
# Default-Start:     3 5                                          # Default-Start:     3 5 (dice su che init partire in questo caso sia su 3 che su 5)
# Default-Stop:      0 1 2 6                                      # Default-Stop:      0 1 2 6 (quando spegnere il progesso in fase di shtdown)
# Short-Description: FOO XYZ daemon providing ZYX                 # Short-Description: Comunikator per inviare sms
# Description:       Start FOO to allow XY and provide YZ         # Description:       Start comunikator per gli sms avvio pc
#    continued on second line by '#<TAB>'
#    should contain enough info for the runlevel editor
#    to give admin some idea what this service does and
#    what it's needed for ...
#    (The Short-Description should already be a good hint.)
### END INIT INFO                                                  ### END INIT INFO

Riassumendo questa sezione ci permette di stabilire il momento in cui vogliamo che il programma si avvii e il runlevel in cui verrà lanciato. Inoltre potremmo stabilire quando arrestarlo (nel nostro caso l’arresto avverrà prima che network sia chiuso!)

Abbiamo detto che il programma comunikator è in /usr/bin quindi la prossima sezione diventerà:

FOO_BIN=/usr/sbin/FOO                                                           comunikator_BIN=/usr/bin/comunikator
test -x $FOO_BIN || { echo "$FOO_BIN not installed";                   test -x $comunikator_BIN || { echo "$comunikator_BIN not installed"
    if [ "$1" = "stop" ]; then exit 0;                                                     if [ "$1" = "stop" ]; then exit 0;
                                                                                                    else exit 5; fi; }

Se il nostro programmino non richiede particolari configurazioni, allora la seguente sezione puo essere tranquillamente commentata con i cancelletti all’inizio!!!

FOO_CONFIG=/etc/sysconfig/FOO
test -r $FOO_CONFIG || { echo "$FOO_CONFIG not existing";
    if [ "$1" = "stop" ]; then exit 0;
    else exit 6; fi; }
 
# Read config   
. $FOO_CONFIG

Ora il più è fatto, vi resta solo da modificare i "FOO" rimanenti immettendo il nome del programma!!!

Fatto ciò, dopo esserci accertati che tutto è stato modificato senza aver commesso errori, possiamo  avviare il programma con il comando (preferibilmente impartito da root):

/home/utente/com_sms start

Riceveremo dei messaggi di output del tipo "Done" in verde. Potremmo accertarci, per ulteriore sicurezza, che tutto funzioni nel migliore dei modi. Aprire una console e digitare:

ps -A | grep comunikator

Per arrestare il programma sempre da console digitare:

/home/utente/com_sms stop

Se tutto funziona nel migliore dei modi apriamo una console, logghiamoci da root e copiamo il file appena editato (com_sms) in /etc/init.d e lo lasciamo li tranquillo.

Ora sempre da root mi raccomando, apriamo una shell, portiamoci con il comando "cd nome_directory" in /etc/init.d  e digitiamo:

insserv com_sms

insserv provvederà automaticamente a piazzare gli script di avvio/arrestro nelle cartelle appropriate e nel giusto ordine per fare avviare il tutto al momento giusto.

 

Gli ultimi 5 articoli di Andrea

Segnala questo articolo: Queste icone linkano i siti di social bookmarking sui quali i lettori possono condividere e trovare nuove pagine web.
  • Facebook
  • del.icio.us
  • Digg
  • Reddit
  • StumbleUpon
  • Technorati
  • OKnotizie
  • Google Bookmarks
  • Slashdot
  • TwitThis
  • Upnews
  • Segnalo

Articoli Correlati