HOWTO Crear un script rc

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

Tabla de contenidos

[editar] Introducción

Los scripts rc son scripts creados para arrancar durante el arranque de un nivel de ejecución. Son muy fáciles de hacer, y su creación puede llevarte tan sólo cinco minutos.

[editar] Funciones Requeridas

  • start()
    • Incluye lo que ocurrirá cuando el script arranque.

[editar] Funciones Opcionales

  • depend()
    • Se utiliza para determinar las dependencias del servicio, se deben cumplir para que arranque el demonio (más abajo hay un ejemplo)
  • stop()
    • Esto es lo que ocurrirá cuando se ordene que el servicio se pare.
  • restart()
    • Esto es lo que se tiene que hacer para parar y volver a iniciar el servicio.
  • checkconfig()
    • Se utiliza para obtener el contenido del archivo /etc/conf.d/nombreDelServicio donde nombreDelServicio se corresponde al servicio actual que estamos desarrollando.

[editar] Ejemplo de script rc

Para este ejemplo vamos a crear un script que corra el demonio "ejemplo" que situaremos en /etc/init.d/ejemplo

Archivo: /etc/init.d/ejemplo
#!/sbin/runscript

depend() {
        # el servicio necesita acceso a internet para funcionar
        need net
        # debe arrancar antes del mta (agente de transporte de correo)
        before mta
        # el servicio utiliza logger
        use logger
        # debe arrancar después de domainname
        after domainname
}

checkconfig() {
        if [ -z "$VAR_DESDE_CONFIGURACION" ] || [ -z "$VAR2_DESDE_CONFIGURACION" ] ; then
          eerror "Primero debes establecer las opciones en /etc/conf.d/ejemplo"
          return 1
        fi
}

start() {        
        # Mostramos la información con lo que está ocurriendo
        ebegin "Iniciando el servicio Ejemplo"  
        #ejecutamos la función checkconfig
        checkconfig || return 1
        # Iniciamos el proceso como demonio y guardamos su pid (identificador de proceso)
        start-stop-daemon --start --background --pidfile /var/run/ejemplo.pid --make-pidfile --exec /usr/bin/ejemplo 
        # Mostramos que arrancó correctamente o el error
        eend $?
}

stop() {
        # Mostramos la información de lo que está ocurriendo
        ebegin "Deteniendo el servicio ejemplo"
        # Detenemos el servicio utilizando el pid (identificador de proceso) que guardamos con la función start()
        start-stop-daemon --stop --pidfile /var/run/ejemplo --name ejemplo
        # Mostramos que pudimos realizar la detención o el error
        eend $?
}

Aquí está el archivo /etc/conf.d/ejemplo

Archivo: /etc/conf.d/ejemplo
#/etc/conf.d/ejemplo - Variables de configuración
VAR_DESDE_CONFIGURACION="EJEMPLO"
VAR2_DESDE_CONFIGURACION="EJEMPLO2"

Si es necesario pasarle parámetros al ejecutable se puede utilizar la sección de inicio de start-stop-daemon. Puede ser como se detalla a continuación. En el ejemplo ejecutaremos /usr/bin/ejemplo -d

Archivo: /etc/init.d/ejemplo
start() {
        # Mostramos que estamos iniciando el servicio
        ebegin "Iniciando el servicio ejemplo"  
        # Iniciamos el proceso como demonio con el parámetro "-d" y guardamos su pid
        start-stop-daemon --start --background --pidfile /var/run/eejemplo.pid --make-pidfile --exec /usr/bin/ejemplo -- -d
        # Mostramos que arrancamos correctamente o el error
        eend $?
}

Si tienes el problema de que tus scripts se paran después de iniciar, prueba a utilizarlos como en el siguiente ejemplo:

Archivo: /etc/init.d/ejemplo
#!/sbin/runscript

depend() {
        # El servicio necesita la conexión a Internet
        need net
}

start() {
        ebegin "Iniciando el servicio ejemplo"
        start-stop-daemon --start --exec /usr/bin/ejemplo
        eend $?
}

stop() {
        ebegin "Deteniendo el servicio ejemplo"
        start-stop-daemon --stop --exec /usr/sbin/ejemplo
        eend $?
}

[editar] Ejecutando el script

Necesitamos darle permiso de ejecución para que funcione.

user@machine $ chmod +x ejemplo

[editar] Manualmente

  • Asegurate de que el script se encuentra en /etc/init.d/
  • ejecuta "/etc/init.d/ejemplo start"

[editar] Durante el arranque

  • Asegurate de que el script se encuentra en /etc/init.d/
  • utiliza rc-update "rc-update add ejemplo default"

[editar] Deteniendo la ejecución

  • Para detenerlo: "/etc/init.d/ejemplo stop"
  • para detenerlo si se ha quedado zombie "/etc/init.d/ejemplo zap" así se borrará el archivo pid.
  • para eliminarlo del nivel de ejecución del arranque "rc-update del example"

[editar] Mira también

Herramientas personales
Otros idiomas