Einsamkeit

Thursday, January 13, 2005

Por fin ....

Después de varios días de trabajo y dolores de cabeza, por fin me ha quedado mi daemon.
El daemon que programé sirve para estar escuchando un puerto determinado, y un programa cliente le manda peticiones. Pues bien, como necesita comenzar desde que bootea la máquina pusé un script en /etc/rc.d/init.d (es que es una versión ya vieja de RedHat GNU/Linux), cree los symlinks correspondientes en rc3.d y rc5.d

# ln -s ../init.d/sayd S85sayd


Reinicie la máquina. Vï que el programa comenzó, me logeo, le doy un

$ netstat -an

el puerto está abierto. Le doy un :

$ ps ax | grep say_serverd

Ahí está el programa corriendo. Uso el cliente para probarlo, nada. Otra vez, nada. Me empiezo a preocupar. Decido reiniciar el daemon:

# /etc/rc.d/init.d/sayd restart

Pruebo con el cliente y funciona !! Maravilloso !! vuelvo a reiniciar la máquina, pruebo con el cliente, NADA. No respondía el maldito demonio !!. Hora de preguntar, voy al canal de #debianmexico, recibo consejos, que a veces me confundieron (leonel). Fuí a mejor al canal de #c, y pues me empiezan a preguntar qué hace mi programa y todo eso, les explico y me dan más consejos. Entre ellos uno muy importante, se debe daemonizar el demonio. : S ¿Qué es eso ? Fuí a preguntarle a Google y el respondió con una página muy buena donde explica todo ese proceso. Modifique mi programa, compile, copie el binario a donde estaba el antiguo, reinicie , cruce los dedos, me encomende a San Juan Diego (jajajajaja), probe con el cliente y NADA. No puede ser !!!, dije. Creí que era el orden que andaba iniciando el daemon, le cambié hasta el último lugar: S99sayd. Reinicie, cruce los dedos, ya no me encomende a San Juan Diego, probe con el cliente y NADA. Ya estaba desesperado. Así pase 2 días probando, cambiando aquí, cambiando allá. Preguntando en #C, esperando un programa ejemplo (leonel).

Hasta que hoy decidí escribir a las benditas y divinas listas de Debian !!
debian-testing@lists.debian.org
debian-user@lists.debian.org
debian-mentors@lists.debian.org

Explique todo lo que pasaba y había hecho. Me contestaron muy amablemente dando consejos. Hasta que hubo una persona que me hizo ver la luz: Marc Auslander.
Para este tiempo, ya había puesto el código en unas páginas para que lo vieran. Esta persona me escribió:

"You need to debug further, and describe the problem more completely.
Since you can write to a trace file, you want to find out where the
two executions diverge.

One standard trap - the environment variables, including path, are
going to be different when started by init. If you are trying to exec
another program, or use the system() program which does this under the
covers, your call could be failing because the path is different.

Also consider what userid you are running the daemon under in both cases. "

Bingo !!!!!!! Me abrió los ojos, ví con claridad, volví a nacer !!!

En mi código tenía una línea así:
sprintf(message, "say -s 4 -a \"%s\"", buffer);

El comando lo estoy dando sin la ruta completa !!! Grave error !!!
sprintf(message, "/usr/local/bin/say -s 4 -a \"%s\"", buffer);
Con estos "simples" 15 carácteres se solucionó el problema !!! A algunos les parecerá trivial, pero en ese momento fue un dolor de cabeza, el no encontrar el maldito error.

"Meine Hoffnung soll mich leiten

Durch die Tage ohne Dich
Und die Liebe soll mich tragen
Wenn der Schmerz die Hoffnung bricht"

0 Comments:

Post a Comment

<< Home