19 de Marzo, 2004

Arrancando servicios locales en OpenBSD (y 2)

Pensando en lo que comenté acerca de arrancar servicios locales en OpenBSD, he caido en la cuenta de que no sería nada complicado implementar un sistema para lanzar servicios como el que emplea FreeBSD. Así no hay escusas: use OpenBSD y hágaselo usted mismo ;).

Claro que no tendremos los scripts de ejemplo que nos proporcionan los encargados de cada port como pasa en FreeBSD, pero partiendo de una plantilla bastante sencilla podremos solucionar el problema más o menos con comodidad.

La base de nuesto nuevo mecanismo de arranque para servicios locales es el siquiente fichero rc, que podríamos poner, por ejemplo, dentro de /etc/rc.d/:

RC_D="/etc/rc.d"

for service in $RC_D/*.sh; do
        if [ -x $service ]; then
                $service start
        fi
done
# EOF

Como se puede ver, en la variable RC_D tenemos que especificar el directorio donde estarán los scripts para arrancar los servicios (/etc/rc.d/ en este caso).

Se intentará ejecutar todos los ficheros terminados en .sh y que tengan permisos de ejecución dentro del directorio especificado por RC_D.

Para activar el script simplemente añadimos antes del echo '.' que encontramos al final de /etc/rc.local las siguientes lineas:

# arranca servicios locales
. /etc/rc.d/rc

Y con eso ya se incluiría nuestro rc en rc.local, ejecutándose en cada arranque de sistema.

Ahora solo falta preparar los scripts que queramos que se ejecuten. Siguiendo el ejemplo de MySQL:

#!/bin/sh
# este es mysql.sh

# parametros para el servicio
PARAMS=""
# nombre del servicio
SERVICE="mysql"
# el demonio a arrancar
DAEMON="/usr/local/bin/safe_mysqld"
# como se pone en marcha el servicio
START="$DAEMON $PARAMS --user=mysql > /dev/null &"
# como se detiene el servicio
STOP="mysqladmin -u root -p shutdown"

case $1 in
        start)
                if [ -x $DAEMON ]; then
                        echo -n " $SERVICE";  $START
                        exit $?
                fi
                ;;

        stop)
                echo -n " stopping $SERVICE: "; $STOP
                [ $? -eq 0 ] && echo "done"
                exit $?
                ;;

        restart)
                $0 stop || $0 start
                exit $?
                ;;

        *)
                echo "usage: $0 (start|stop|restart)"
                ;;
esac
exit 1
# EOF

Los comentarios explican las variables del principio del script. Ojo que hay que poner permisos de ejecución al script (chmod +x /etc/rc.d/mysql.sh), y listos :).

Si queremos deshabilitar un servicio, pues con chmod -x le quitamos los permisos de ejecución y en el siguiente arranque no se ejecutará.

Cuidado que esto lo he hecho en diez minutos, no garantizo nada de nada de nada. Si no hay problemas, pues bien :D. Sino, se agradecen comentarios.

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.