e-interiores Headline Animator

20.1.07

Crear un daemon en linux

Ando buscando como hacer un daemon en una máquina linux que monitorice diferentes procesos. He encontrado lo que tiene que hacer un daemon:
* Convertirse en un process-leader (haciendo un setsid, de lo contrario sería un proceso huérfano),
* Separarse de la shell que lo ejecutó (después de hacer fork),
* Cambiar el directorio (chdir) al directorio raiz (por temas de seguridad),
* Establecer umask en 0 (por temas de seguridad),
* Cerrar todos los descriptores de fichero (stdin, stderr, stdout) a /dev/null
Un ejemplo de daemon programado en perl.

use POSIX qw(setsid);
chdir '/' or die "Can't chdir to /: $!";
umask 0;
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
#open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
open STDERR, '>/dev/null' or die "Can't write to /dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
while(1) {
sleep(5);
print "Hello...\n";
}

En este caso no cierra la salida estándar para poder ver que el daemon está activo.
Podemos ver un ejemplo de configuracion de los scripts de parada y arranque
Más detalles en Linux daemon HOWTO

No hay comentarios: