Básicamente, los servicios en Linux, o demonios, son lo mismo que los servicios en Windows. Se trata de procesos que se ejecutan en segundo plano y que suelen estar gestionados por el sistema, aunque el usuario puede gestionarlos también si sabe cómo proceder.
El servicio inicial clásico que inicia el sistema operativo y sus servicios en Linux es "init".
Las tareas de "init" son las siguientes:
- Comprueba los sistemas de ficheros.
- Monta los sistemas de ficheros permanentes.
- Activa la zona de memoria de intercambio.
- Activa los demonios del sistema (p.e: atd, syslog).
- Activa la red.
- Inicia los demonios de red del sistema (p.e.: sendmail, httpsd).
- Limpia los sistemas de ficheros temporales.
- Habilita el inicio de sesión a los usuarios del sistema.
System-V (o SysV) es un modo de definir qué estado debe tener el equipo en un momento determinado. Para realizar su tarea, este demonio gestiona la ejecución de los distintos procesos basándose en distintos niveles de ejecución ("runlevels", en inglés). Dichos niveles, o modos de ejecución, están numerados del 0 al 6 y cada distribución los utiliza para fines diferentes, aunque hay varios niveles comunes. Los niveles comunes son: 0 (utilizado para apagar el equipo), 1 (modo monousuario), y 6 (reiniciar equipo), el resto pueden variar en las distintas distribuciones de Linux (Ubuntu, Fedora...).
0 | Apagar el equipo. | ||
1 | Modo monousuario. | ||
2 | El comando update-rc.d permite automatizar el proceso de creación y borrado de enlaces a los guiones de inicio, con el fin de iniciar/parar servicios. | ||
3 | No utilizado. | ||
4 | No utilizado. | ||
5 | No utilizado. | ||
6 | Reiniciar el sistema. |
Es posible cambiar el nivel de ejecución predeterminado si se edita el archivo "rc-sysinit.conf", que se encuentra en la ruta "/etc/init/". El archivo se editará como cualquier otro mediante el comando <editor de texto> <ruta al archivo a editar> (anteponiendo sudo si no se ha abierto sesión como administrador), y en él se buscará la línea "env DEFAULT_RUNLEVEL=2", donde se cambiará el número por el del modo de ejecución que se prefiera y se guardarán los cambios al cerrarlo de nuevo.
Desde un terminal se puede ver el nivel de ejecución actual del sistema operativo utilizando el comando runlevel.
Otra función que se puede realizar gracias a SysV es cambiar manualmente el nivel de ejecución mediante los comandos telinit <nº del modo de ejecución deseado> o init <nº del modo de ejecución deseado> (anteponiendo, en ambos casos, sudo si no se ha abierto la sesión como administrador).
En función del nivel de ejecución, existe la posibilidad de configurar qué servicios deben iniciarse de forma automática, para ello es necesario crear unos enlaces simbólicos en las carpetas "/etc/rcN.d" (donde "N" es un número de 0 a 6 que indica el nivel de ejecución de Linux) que apunten al guión de inicio del servicio que se encuentra en "/etc/init.d/".
Estos enlaces deberán tener un nombre un poco especial ya que deberán comenzar con la letra "S" de Start (arrancar) seguida de un número de dos cifras (para establecer el orden de arranque de los servicios) y del nombre del servicio. Sin embargo, si lo que interesa es que el servicio no arranque, la primera letra deberá ser una "K" de Kill (detener) en lugar de la antes mencionada.
Pueden verse los guiones que se ejecutan en un determinado nivel de ejecución del mismo modo que se ve el contenido de un directorio cualquiera, utilizando el comando ls -l <ruta del directorio "rcN.d"> (o el apropiado según la distribución de Linux donde se esté operando).
Para crear los enlaces se utiliza el comando update-rc.d <nombre_demonio> start <número de prioridad entre 10 y 99> <nºde nivel 1> <nº de nivel 2>... . stop <número de prioridad entre 10 y 99> <nºde nivel 1> <nº de nivel 2>... . (anteponiendo sudo si no se ha abierto la sesión como administrador). No obstante, si este comando no crea los enlaces porque ya están creados, existe la posibilidad de eliminarlos con el parámetro "-f" (forzado) y acto seguido volver a crearlos; para ello, se utilizaría la sintaxis update-rc.d -f <nombre_servicio> remove (anteponiendo sudo si no se ha abierto la sesión como administrador).
La gestión de los servicios de "init" (anteponiendo sudo si no se ha abierto la sesión como administrador) se realiza mediante los siguientes comandos básicos:
- /etc/init.d/<nombre_servicio> start: Inicia un servicio.
- /etc/init.d/<nombre_ servicio> stop: Detiene un servicio.
- /etc/init.d/<nombre_ servicio> restart: Reinicia un servicio.
- /etc/init.d/<nombre_ servicio> reload: Carga la configuración nuevamente sin detener el servicio.
- /etc/init.d/<nombre_ servicio> status: Muestra el estado del servicio.
UPSTART
Desde la versión 9.10 de Ubuntu, comenzó a implantarse Upstart como sustituto del servicio "init", que es quien se encarga de iniciar los servicios durante el inicio del sistema, detenerlos cuando se apaga y controlar su funcionamiento mientras están activos. Sin embargo, esto no significa que todas las distribuciones de Linux lo tenga implantado por defecto.Dentro de "/etc/init.d", además de los guiones tradicionales, se encuentran los "Upstart Jobs". Para ver el estado de este tipo de demonios, se puede utilizar el comando initctl list (anteponiendo sudo si no se ha abierto la sesión como administrador); para ver un servicio concreto, se puede canalizar la salida mediante el comando grep, quedando la sintaxis completa así: initctl list | grep <nombre_servicio> (anteponiendo sudo si no se ha abierto la sesión como administrador).
Los comandos básicos de gestión de demonios de Upstart (anteponiendo sudo si no se ha abierto la sesión como administrador) son:
- start <nombre_ servicio>: Inicia el servicio.
- stop <nombre_ servicio>: Detiene el servicio.
- restart <nombre_ servicio>: Reinicia el servicio.
- reload <nombre_ servicio>: Carga la configuración nuevamente sin detener el
servicio. - status <nombre_ servicio>: Muestra el estado del servicio.
EL COMANDO MIXTO
Si el sistema operativo de Linux posee los dos servicios anteriores, es posible gestionar sus demonios con un comando que permite manipular servicios basados en cualquiera de los dos, se trata de service, que se utiliza (anteponiendo sudo si no se ha abierto la sesión como administrador) de las siguientes formas básicas:- service <nombre_ servicio> start: Inicia un servicio.
- service <nombre_ servicio> stop: Detiene un servicio.
- service <nombre_ servicio> restart: Reinicia un servicio.
- service <nombre_ servicio> reload: Carga la configuración nuevamente sin detener el servicio.
- service <nombre_ servicio> status: Muestra el estado del servicio.
- service --status-all: Muestra una lista de todos los servicios, tanto si son
gestionados por Upstart o System-V, pero no su estado real. Puede utilizarse sin sudo.
SYSTEMD
A partir del año 2.011 entra en juego un nuevo sistema de inicio de Linux y de gestión de servicios llamado systemd, que actualmente se está usando predeterminadamente en la mayoría de distribuciones Linux actuales.
La principal diferencia respecto a Upstart, es que ya no requiere satisfacer ciertas dependencias al momento de cargar los componentes, Upstart requiere de una causa (evento) para generar el siguiente paso, sin embargo systemd no necesita de tal evento, lo cual, lógicamente, hace que el proceso sea más rápido.
La principal diferencia respecto a Upstart, es que ya no requiere satisfacer ciertas dependencias al momento de cargar los componentes, Upstart requiere de una causa (evento) para generar el siguiente paso, sin embargo systemd no necesita de tal evento, lo cual, lógicamente, hace que el proceso sea más rápido.
Pueden verse los demonios gestionados por systemd mediante el comando systemctl status.
Los demás comandos básicos de gestión de servicios (anteponiendo sudo si no se ha abierto la sesión como administrador) son:
- systemctl start <nombre_ servicio>.service: Inicia el servicio.
- systemctl stop <nombre_ servicio>.service: Detiene el servicio.
- systemctl restart <nombre_ servicio>.service: Reinicia el servicio.
- systemctl reload <nombre_ servicio>.service: Carga la configuración nuevamente sin detener el servicio.
- systemctl status <nombre_ servicio>.service: Muestra el estado del servicio.
Espero que esta entrada haya sido interesante y/o útil al lector. En caso afirmativo, aguardo que el lector la comparta y/o comente, por favor.
No hay comentarios:
Publicar un comentario
Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.