SysV + RC
Init de estilo BSD basado en SysVinit como PID1. RC loc componen un conjunto de scripts de shell simples, sin gestión de dependencias, que inician, paran o reinician el demonio: el orden de arranque de los servicios lo decides tú. Con SysVinit + RC no existe supervisión de servicios.
| Archivo | Función |
|---|---|
/etc/rc |
Script principal de arranque, ejecutado por /sbin/init. |
/etc/rc.conf |
Reloj, zona horaria, teclado, fuente de consola y lista de demonios a arrancar. |
/etc/rc.d/ |
Directorio con el script de cada servicio. |
/etc/rc.local |
Comandos adicionales al final del arranque en modo multiusuario. |
/etc/rc.shutdown |
Script ejecutado al apagar el sistema. |
/etc/rc.subr |
Funciones comunes que usan los scripts de /etc/rc.d/. |
Gestionar servicios
Cada servicio se controla directamente con su script en /etc/rc.d/:
# /etc/rc.d/networkmanager start
# /etc/rc.d/networkmanager restart
# /etc/rc.d/networkmanager stop
Para que un servicio arranque con el sistema, añádelo a la variable DAEMONS en
/etc/rc.conf, en el orden en que quieras que se inicie.
Crear un servicio
Un script de servicio solo necesita hacer source de /etc/rc.subr y usar
sus funciones. Ejemplo mínimo:
#!/bin/sh
. /etc/rc.subr
case $1 in
start)
msg "Iniciando demonio..."
start_daemon /usr/bin/miprograma
;;
stop)
msg "Deteniendo demonio..."
stop_daemon /usr/bin/miprograma
;;
restart)
$0 stop
sleep 1
$0 start
;;
status)
status_daemon /usr/bin/miprograma
;;
*)
echo "uso: $0 [start|stop|restart|status]"
;;
esac
Guarda el script en /etc/rc.d/ con permisos de ejecución (chmod +x) y ya
puedes controlarlo con start/stop/restart/status.
Runit
Suite de supervisión de procesos minimalista. Cada servicio corre en un entorno de proceso limpio, independientemente de cómo se haya arrancado o reiniciado, y cuenta con su propio registro de log mientras el servicio esté activo.
Estructura de un servicio
Cada servicio vive en un directorio con un único archivo obligatorio, run, que
ejecuta el proceso en primer plano. De forma opcional puede incluir:
check— comprueba si el servicio está disponible.finish— se ejecuta al parar el servicio.conf— variables de entorno usadas porrun.log/— subdirectorio con su propiorunpara recibir la salida del servicio.
Gestionar servicios
Los servicios activos son symlinks dentro de /var/service/:
# sv up <servicio>
# sv down <servicio>
# sv restart <servicio>
# sv status <servicio>
Habilitar un servicio
# ln -s /etc/sv/<servicio> /var/service/
Esto arranca el servicio de inmediato; runit lo reiniciará si se cae y lo volverá a levantar en cada arranque.
Deshabilitar un servicio
# rm /var/service/<servicio>
Si solo quieres evitar que arranque en el boot sin quitarlo de la supervisión, crea un archivo
down dentro de su directorio de servicio:
# touch /etc/sv/<servicio>/down
s6
Suite de supervisión de procesos que, junto con s6-rc (gestión de servicios) y
s6-linux-init (arranque del sistema), forma el init completo. s6-svscan
actúa como PID 1 y supervisa todo el árbol de procesos.
Bundles
Los servicios se agrupan en bundles: colecciones de demonios (longrun),
tareas de un solo uso (oneshot) e incluso otros bundles. El bundle
default es el que arranca en un sistema normal e incluye a su vez
boot, con las tareas esenciales.
Gestionar servicios
# s6 live start <servicio>
# s6 live stop <servicio>
# s6 process restart <servicio>
# s6 live status
Habilitar o deshabilitar en el arranque
# s6 set enable <servicio>
# s6 set disable <servicio>
# s6 set commit
# s6 live install
commit e install son necesarios para que el cambio persista entre
reinicios. Si has añadido o modificado definiciones de servicio, sincroniza antes con
s6 repo sync.
Cada rootfs de starkOS trae un único init preinstalado; no se mezclan entre sí. Si quieres cambiar de init, deberás reinstalar con el rootfs correspondiente (ver Descargas).