Gestión de servicios en SysVinit

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org

Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.

Introducción

La gestión de servicios es fundamental para administrar un sistema Linux. Un servicio es un programa que trabaja en segundo plano, sin intervención directa del usuario, proporcionando funcionalidades específicas al sistema. Este manual se enfoca exclusivamente en la gestión de servicios utilizando SysVinit ―sistema de inicialización utilizado por ALDOS―, con énfasis en el enfoque pedagógico y práctico para fines educativos y didácticos.

Niveles de ejecución en SysVinit

Los niveles de ejecución definen el estado operativo del sistema y qué servicios deben estar activos en cada momento. En SysVinit, los niveles de ejecución están numerados del 0 al 6.

0 - Apagado
1 - Mono-usuario (modo mantenimiento)
2 - Multi-usuario sin red
3 - Multi-usuario con red (modo texto)
4 - Sin usar (personalizable)
5 - Multi-usuario con red e interfaz gráfica
6 - Reinicio

Determinar el nivel de ejecución actual

Para conocer el nivel de ejecución actual, utilice:

who -r

O también:

runlevel

Este último mandato mostrará el nivel anterior y el actual. Por ejemplo: N 3 indica que no había nivel anterior y el actual es el nivel 3.

Conmutar el nivel de ejecución

Para cambiar temporalmente a otro nivel de ejecución:

init 3  # Cambia a nivel 3 (multi-usuario con red)

Para cambiar permanentemente el nivel de ejecución predeterminado, edite el archivo /etc/inittab:

vim /etc/inittab

Busque la línea similar a:

id:5:initdefault:

Cambie el número según el nivel deseado. Por ejemplo, para nivel 3 (modo texto):

id:3:initdefault:

Importante: Después de editar /etc/inittab, el cambio surtirá efecto tras el siguiente reinicio del sistema.

Gestión de servicios individuales

SysVinit utiliza guiones de instrucciones ubicados en el directorio /etc/init.d para controlar cada servicio. Estos guiones aceptan argumentos como start, stop, restart, reload y status.

Iniciar un servicio

service srvejemplo start

Ejemplo con el servicio de tareas programadas:

service crond start

Detener un servicio

service srvejemplo stop

Ejemplo:

service crond stop

Reiniciar un servicio

service srvejemplo restart

Ejemplo:

service crond restart

Recargar configuración de un servicio

Algunos servicios soportan recargar su configuración sin necesidad de reiniciarse completamente:

service srvejemplo reload

Ejemplo:

service crond reload

Verificar el estado de un servicio

service srvejemplo status

Ejemplo:

service crond status

Gestión de la inicialización automática de servicios

El mandato chkconfig permite administrar en qué niveles de ejecución un servicio debe iniciarse automáticamente.

Activar un servicio para que inicie automáticamente

chkconfig srvejemplo on

Ejemplo:

chkconfig crond on

Esto activará el servicio en los niveles de ejecución predeterminados (generalmente 2, 3, 4 y 5).

Desactivar el inicio automático de un servicio

chkconfig srvejemplo off

Ejemplo:

chkconfig crond off

Verificar el estado de un servicio en los diferentes niveles

chkconfig --list srvejemplo

Ejemplo:

chkconfig --list crond

Para ver todos los servicios y su configuración por niveles:

chkconfig --list

Configurar niveles específicos para un servicio

Puede especificar exactamente en qué niveles debe activarse o desactivarse un servicio:

chkconfig --level niveles srvejemplo on|off

Ejemplo para activar crond sólo en niveles 3 y 5:

chkconfig --level 35 crond on

Ejemplo para desactivar atd en todos los niveles:

chkconfig --level 0123456 atd off

Servicios comunes en ALDOS

Estos son algunos servicios importantes en ALDOS y su gestión:

Servicio crond (tareas programadas)

El servicio crond ejecuta tareas programadas en momentos específicos. Es esencial para automatización.

service crond start      # Iniciar
service crond stop       # Detener
service crond restart    # Reiniciar
service crond reload     # Recargar configuración
service crond status     # Ver estado
chkconfig crond on       # Habilitar al inicio
chkconfig crond off      # Deshabilitar al inicio

Servicio atd (ejecución de tareas únicas)

El servicio atd permite ejecutar mandatos una sola vez en un momento específico.

service atd start        # Iniciar
service atd stop         # Detener
service atd status       # Ver estado
chkconfig atd on         # Habilitar al inicio
chkconfig atd off        # Deshabilitar al inicio

Servicio network (red)

El servicio network gestiona las interfaces de red del sistema.

service network start    # Iniciar interfaces de red
service network stop     # Detener interfaces de red
service network restart  # Reiniciar configuración de red
service network status   # Ver estado de interfaces
chkconfig network on     # Habilitar al inicio

Servicio sshd (acceso remoto SSH)

El servicio sshd permite conexiones seguras remotas al sistema.

service sshd start       # Iniciar servidor SSH
service sshd stop        # Detener servidor SSH
service sshd restart     # Reiniciar servidor SSH
service sshd reload      # Recargar configuración
service sshd status      # Ver estado
chkconfig sshd on        # Habilitar al inicio
chkconfig sshd off       # Deshabilitar al inicio

Ejercicio práctico: Gestión de servicios en SysVinit

Siga estos pasos para practicar la gestión de servicios en un sistema con SysVinit:

  1. Verifique el nivel de ejecución actual:

    who -r
    runlevel
  2. Verifique el estado del servicio crond:

    service crond status
  3. Si el servicio está detenido, inícielo:

    service crond start
  4. Habilite el servicio crond para que inicie automáticamente en los niveles 3 y 5:

    chkconfig --level 35 crond on
  5. Verifique la configuración:

    chkconfig --list crond
  6. Detenga el servicio temporalmente:

    service crond stop
  7. Verifique que el servicio se detuvo:

    service crond status
  8. Reinicie el servicio:

    service crond restart
  9. Verifique el estado del servicio atd:

    service atd status
    chkconfig --list atd
  10. Habilite el servicio atd para todos los niveles:

    chkconfig atd on
  11. Repita el ejercicio con el servicio sshd si está instalado en su sistema.

Estructura de directorios de SysVinit

Para comprender mejor cómo funciona SysVinit, es útil conocer su estructura de directorios:

/etc/init.d           # Guiones de instrucciones de inicio de servicios
/etc/inittab.d        # Configuración adicional desde archivos *.tab
/etc/rc.d             # Directorios de niveles de ejecución
/etc/rc.d/rc0.d       # Guiones de instrucciones para nivel 0 (apagado)
/etc/rc.d/rc1.d       # Guiones de instrucciones para nivel 1 (mono-usuario)
/etc/rc.d/rc2.d       # Guiones de instrucciones para nivel 2
/etc/rc.d/rc3.d       # Guiones de instrucciones para nivel 3
/etc/rc.d/rc4.d       # Guiones de instrucciones para nivel 4
/etc/rc.d/rc5.d       # Guiones de instrucciones para nivel 5 (gráfico)
/etc/rc.d/rc6.d       # Guiones de instrucciones para nivel 6 (reinicio)
/etc/rc.d/rc.local    # Guiones de instrucciones ejecutado al final del inicio
/etc/inittab          # Configuración principal de init

Los directorios rcN.d contienen enlaces simbólicos a los guiones de instrucciones en /etc/init.d. Los enlaces que comienzan con S (start) se ejecutan al ingresar al nivel, y los que comienzan con K (kill) al salir del nivel.

Verificación de registros

Los servicios en SysVinit registran su actividad en diferentes archivos de registro. Los principales son:

/var/log/messages      # Registro general del sistema
/var/log/secure        # Registros de seguridad y autenticación
/var/log/cron          # Registros del servicio crond

Para ver los registros en tiempo real de un servicio específico, puede usar:

tail -f /var/log/messages | grep servicio

Ejemplo para ver registros de crond:

tail -f /var/log/cron

Solución de problemas comunes

Servicio no encontrado

Si recibe un mensaje como «servicio desconocido», verifique que el servicio esté instalado y que exista su guion de instrucciones en el directorio /etc/init.d:

ls /etc/init.d | grep srvejemplo

Permisos insuficientes

La gestión de servicios requiere privilegios de root. Si es usuario regular, utilice sudo:

sudo service crond status
sudo chkconfig crond on

Servicio no responde a stop

Si un servicio no se detiene con service servicio stop, puede intentar forzar su terminación:

pkill -9 nombre-del-proceso

Precaución: Esta acción es drástica y debe usarse sólo cuando sea necesario.

Verificar dependencias

Algunos servicios dependen de otros. Consulte la documentación del servicio o los comentarios en el guion de instrucciones /etc/init.d/srvejemplo.

Novedades y mejoras en SysVinit 3.15

La versión 3.15 de SysVinit representa una evolución significativa respecto a las versiones utilizadas históricamente en distribuciones como Fedora. Esta actualización incorpora mejoras sustanciales en seguridad, robustez e interoperabilidad, diseñadas para adaptar el sistema de inicialización tradicional a los entornos modernos de virtualización, contenedores y administración de servicios. Las siguientes secciones detallan las funcionalidades más relevantes para la administración de sistemas con ALDOS.

Capacidades ampliadas del archivo /etc/inittab

El archivo central de configuración ha recibido mejoras importantes para guiones de instrucciones de inicialización más complejos y seguros.

Líneas de comando más largas y manejo seguro

El límite de caracteres por línea en inittab se amplió significativamente. Además, se corrigió un comportamiento peligroso: en lugar de truncar silenciosamente las líneas demasiado largas ―lo que podía causar errores crípticos―, ahora el sistema rechaza la línea y registra una advertencia en los registros del sistema, proporcionando retroalimentación clara ante errores de configuración.

Encadenamiento lógico de mandatos

Se introdujo soporte para los operadores lógicos && (AND) y || (OR) dentro del campo de acción. Esta capacidad permite crear dependencias y lógica condicional simple directamente en inittab, haciendo los guiones de inicio más robustos.

Ejecución literal de mandatos

Al prefijar el mandato con el símbolo @, éste se ejecuta directamente sin pasar por un intérprete de shell (/bin/sh). Esto proporciona mayor seguridad y eficiencia para mandatos que no requieren expansión de variables, globbing u otras características del shell, y evita problemas si el mandato contiene caracteres especiales.

Configuración modular desde el directorio /etc/inittab.d

El servicio init puede cargar configuración adicional desde archivos ubicados en el directorio /etc/inittab.d. Esta característica permite organizar la configuración de manera más limpia, similar a otros servicios modernos, siendo ideal para paquetes de equipamiento lógico que necesitan añadir sus propias entradas. Importante: los archivos en este directorio deben tener la extensión .tab para que el sistema los reconozca y procese automáticamente durante la inicialización.

Interoperabilidad y escenarios avanzados

Apagado ordenado desde contenedores

SysVinit ahora interpreta señales específicas enviadas por el comando systemd-machined (machinectl stop) cuando se solicita detener un contenedor. Esta mejora permite una interacción correcta y un apagado ordenado cuando ALDOS se ejecuta como sistema operativo invitado dentro de un contenedor gestionado por un anfitrión con SystemD, siendo crucial para entornos de virtualización y contenedores modernos.

Herramienta de conversión de unidades systemd

Se incluye un guion de instrucciones de conversión llamado sysd2v (/usr/bin/sysd2v) que permite generar esqueletos de guiones al estilo init.d a partir de archivos de unidad de systemd (.service). Esta herramienta facilita la migración de servicios o la coexistencia con sistemas que utilizan systemd, permitiendo reutilizar o adaptar configuraciones.

Mejoras en herramientas auxiliares

Varias utilidades han recibido actualizaciones que mejoran su robustez y funcionalidad:

Nota sobre la implementación en ALDOS

En ALDOS, SysVinit se distribuye a través de una arquitectura modular de paquetes:

Esta implementación permite que ALDOS utilice SysVinit 3.15 como sistema de inicialización moderno y mantenido.

Ejercicio práctico ampliado: Explorando las nuevas características

Siga estos pasos para experimentar con las mejoras de SysVinit 3.15:

  1. Probar el manejo de líneas largas: Intente añadir una línea deliberadamente extensa en /etc/inittab (puede ser un comentario). Reinicie init con telinit q y busque la advertencia en /var/log/messages.

  2. Comprender el encadenamiento de mandatos en inittab: Imagine que tiene la siguiente línea en un archivo inittab:

    tf:once:/bin/echo "Paso 1 OK" && /bin/echo "Paso 2 también OK" >> /tmp/log.txt

    Esta línea ejecutaría los dos mandatos en secuencia, siempre que el primero tenga éxito (código de salida 0). Este tipo de encadenamiento es útil para crear dependencias simples en los guiones de inicio.

  1. Configuración modular: Cree un archivo en el directorio /etc/inittab.d/eje1.tab con una entrada simple y segura, como iniciar un logger:

    # Prueba de inittab.d
    ml:respawn:@/usr/bin/logger -t INITTABD "Mensaje de prueba desde módulo"

    Reinicie init con telinit q y verifique que el proceso esté en ejecución (ps aux | grep logger) y los mensajes en /var/log/messages.

Conclusión

SysVinit ofrece un sistema de gestión de servicios predecible y transparente, ideal para fines educativos y sistemas donde la simplicidad y el control directo son prioritarios. ALDOS, al utilizar SysVinit, mantiene esta tradición que facilita la comprensión de los fundamentos de la administración de servicios en Linux.

La versión 3.15 incorporada en ALDOS dista de ser un sistema de inicialización obsoleto. Las mejoras sustanciales que hemos revisado abordan necesidades modernas: seguridad reforzada (manejo seguro de errores, ejecución literal), mayor robustez en los guiones de instrucciones de inicio (encadenamiento lógico, líneas más largas) e interoperabilidad con infraestructuras contemporáneas (contenedores, systemd).

La práctica regular con los mandatos service y chkconfig proporciona una base sólida para administrar cualquier sistema basado en SysVinit, permitiendo una transición más sencilla a otros sistemas de inicialización cuando sea necesario.

Bibliografía