HOWTO Crear un script rc
De Gentoo Linux Wiki
| 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"
