Come avviare un’applicazione al boot
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/FOOmodificato 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 comunikatorPer 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
- Livestation & openSUSE 11.1: risoluzione problema di avvio (libpcre.so.3) - November 17th, 2008
- OpenSuSE 11.1 Beta3: la voce del Beta Tester - October 31st, 2008
- OpenSuSE11.1 Beta 1 il punto della situazione - October 1st, 2008
- Atheros AR242x e openSUSE 11: come renderla funzionante - July 23rd, 2008
- Schede audio Creative e ICH8 intel in OpenSuSE 11.0 - July 16th, 2008




















Leave a Reply