Dimonitzem el servidor d'echos

De Wikijoan
Dreceres ràpides: navegació, cerca

fitxer programaciodimonislinux.pdf del curs

http://acacha.dyndns.org/mediawiki/index.php/Programaci%C3%B3_de_Dimonis_Linux

Podem baixar el codi font de la Farga (anonymous/anonymous): https://svn.lafarga.cpl.upc.edu/dades/svn/plinux/sessio5/echoDimoni/

Els fitxers que es necessiten són:

echoDimoni$ ls -R #->llistat recursiu dins els directoris
echod.c  echod_estats.c  esquelet  etc  Makefile  Makefile~  skeleton

./etc:
init.d

./etc/init.d:
echod

echoDimoni$ make


Compilem i es generen els executables echod i client.

Ara ja tenim compilat el dimoni echod, i ara s'ha d'instal.lar per tal que s'executi en background

$ cd /etc
/etc$ ls rc
# són els nivells dels dimonis:
# rc0: nivell 0, màquina apagada
# rc1: nivell 1, sistema monousuari
# rc2: debian sempre es queda en aquest nivell
# en altres sistemes: nivell 5 (executar entorn gràfic), nivell 6 (reboot)
/etc$ ls -l rc0.d/ #-> veiem que estan en color blau (són enllaços).

amb aquesta comanda apareixen els dimonis que arrenquen en el nivell r0. Són els enllaços, on es veu la crida al fitxer en la carpeta init.d

S (start)

K (stop)

el número després de la S o la K indica l'ordre d'execució, com s'executen els serveis en l'inici de la màquina. Són scripts en bash. La plantilla de com s'ha de fer un fitxer d'aquests és un skeleton (no cal reinventar, ja està fet i s'ha d'adaptar)

Per tant, el que nosaltres haurem de fer és a partir del skeleton (/etc/init.d/skeleton) fer un script bash que digui com ha d'engegar, aturar-se i reiniciar el dimoni echod, ficar el script dins de init.d i fer un enllaç simbòlic dins dels nivells on volguem executar-lo.

$ sudo cat /etc/default/rcS

controlar coses que es fan quan s'inicia la màquina

Per ex, TMPTIME=0 diu que cada vegada que s'inicia la màquina s'esborra el contingut de la carpeta /tmp

Podem posar el valor de 60 per dir que ho esborri cada 2 mesos.

Executem el dimoni:

$ ./echod
$

veiem que s'està executant en background doncs ens torna a aparèixer el prompt $ de la shell. És a dir, no dóna l'aparença de què és un bucle infinit que està a l'espera de rebre missatges.

$ ps aux
joan     21368  0.0  0.0   1544   244 ?        S    10:28   0:00 ./echod

des del client enviem un missatge, i efectivament el servidor el rep i la retorna al client, que la rep. Per tant funciona correctament.

Ara he de fer que arrenqui atuomàticament en iniciar el sistema. El posaré en el nivell 5. En comptes de partir del skeleton, partiré d'un script que ja funcoioni, com el cron:

$ cd /etc/init.d
/etc/init.d$ cp cron echod
/etc/init.d$ sudo joe echod

i el deixo de la següent manera. Fitxer echod

#!/bin/sh
# modificat Joan Quintana, 30 oct 08
# Start/stop the echod daemon.
#
### BEGIN INIT INFO
# Provides:          echod (servidor d'ecos)
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Servidor d'ecos. Pràctica
# Description:       Servidor d'ecos. Necessita el client 
#                    ./client missatge -> el servidor contesta 'missatge' que el rep altra vegada el client 
### END INIT INFO

#comprovem que existeixi el fitxer
test -f /home/joan/echoDimoni/echod || exit 0

#LSBNAMES='-l'  # Uncomment for LSB name support in /etc/cron.d/
#no sé què és això
. /lib/lsb/init-functions

case "$1" in
start)  log_daemon_msg "Engegant echod" "echod"
        start-stop-daemon --start --quiet --pidfile /var/run/echod.pid --name echod --startas /home/joan/echoDimoni/echod -- $LSBNAMES
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Aturant echod" "echod"
        start-stop-daemon --stop --quiet --pidfile /var/run/echod.pid --name echod
        log_end_msg $?
        ;;
restart) log_daemon_msg "Reiniciant echod" "echod" 
        start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/echod.pid --name echod
        start-stop-daemon --start --quiet --pidfile /var/run/echod.pid --name echod --startas /home/joan/echoDimoni/echod -- $LSBNAMES
        log_end_msg $?
        ;;
*)      log_action_msg "Mode d'us: /etc/init.d/echod {start|stop|restart}"
        exit 2
        ;;
esac
exit 0

i ara faig manualment l'enllaç simbòlic en els nivells 2, 3, 4 i 5:

$ cd /etc/rc2.d
$ ls -la
$ sudo ln -s /etc/init.d/echod S88echod
$ ls -la #comprovem que existeix l'enllaç

$ cd /etc/rc3.d
$ sudo ln -s /etc/init.d/echod S88echod

$ cd /etc/rc4.d
$ sudo ln -s /etc/init.d/echod S88echod

$ cd /etc/rc5.d
$ sudo ln -s /etc/init.d/echod S88echod

Reiniciem, i fem ps aux i enviem un missatge des del client, i comprovem que funciona correctament (compte!, funciona quan ho fem amb els nivells 2, 3, 4 i 5. Quan vaig fer només el link en el nivell 5 no funcionava).

Tots aquests links es poden fer de forma automàtica fent:

$ update-rc.d echod defaults

Això està explicat a Executar un script a l'inici

Recordem que si volem apagar o engegar manualment el servidor d'echos hauré de fer:

$ sudo /etc/init.d/echod
 * Mode d'us: /etc/init.d/echod {start|stop|restart}
$ sudo /etc/init.d/echod restart
 * Reiniciant echod echod 

creat per Joan Quintana Compte

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines