16 de Enero, 2005

Más logs: programas que no emplean syslog

Ya comenté un poco cómo ordenar los logs trabajando con la configuración de syslogd(8). Ahora quiero plantear un problema: ¿qué pasa con aquellos programas que no emplean el logger del sistema para dejar constancia de su actividad?

Veamos el caso de este servidor. No dispone de teclado ni de monitor, y lo administro mediante la red local. Uno de los programas que se ejecutan al arranque es rdate(8); para sincronizar la hora de la máquina. Supongamos que empleo el siguiente script en mi /etc/rc.local:

# rdate
if [ X"${rdate}" != X"NO" -a -x /usr/sbin/rdate ]; then
	echo -n ' rdate'; /usr/sbin/rdate -s $rdate
fi

Y en mi /etc/rc.conf.local tengo:

# NO para desactivar
rdate="ntp.escomposlinux.org"

Tampoco es nada del otro mundo, ya he explicado como añadir programas a los scripts de arranque de OpenBSD.

Además en este caso no es muy necesario, pero cuando este servidor lo movía un Pentium 100 con la pila de la BIOS agotada, sí era importante ;).

rdate no muestra en caso de éxito la fecha/hora obtenida porque empleamos la opción -s. ¿Pero qué pasa si hay un error?

# /usr/sbin/rdate -s host.inexistente.com
rdate: host.inexistente.com: no address associated with name

Se muestra el mensaje de error por pantalla, pero no tenemos pantalla. Bien, pues podemos hacer que envíe el mensaje al logger del sistema, gracias a logger(1).

El uso que vamos a hacer es sencillo:

echo mensaje | logger -p categoria.nivel -t identidad

Como siempre la página del manual aportará más información. En este caso será categoría local0 con el nivel notice y la identidad rdate, quedando nuestro script de rc.local como sigue:

# rdate
if [ X"${rdate}" != X"NO" -a -x /usr/sbin/rdate ]; then
	echo -n ' rdate'; /usr/sbin/rdate $rdate 2>&1 | \
		logger -p local0.notice -t rdate
fi

Ojo que logger toma la entrada estándar cuando no se le especifica ningún mensaje (como en este caso), pero no el error estándar. Por eso hemos redirigido los errores a la salida estándar de rdate (el descriptor de fichero 2 al descriptor de fichero 1, es decir: 2>&1).

De esta forma toda la salida de rdate (he quitado el -s) quedará registrada en los logs del sistema adecuadamente y podremos hacer seguimiento de cualquier problema que de la aplicación al ejecutarse.

Nota importante: rdate está incluido en los scripts del sistema (ojear /etc/rc.conf), pero nunca es buena idea modificar rc. Por eso he añadido el programa de forma local, donde sí puedo hacer lo que quiera sin peligro de fastidiar nada en posibles actualizaciones del sistema. Si queremos usar rdate sin emplear el logger del sistema, solo tendremos que emplear rdate_flags adecuadamente en rc.conf.local.

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.