Cómo parar e iniciar servicios durante y después del arranque de linux

Para ello primero nos tenemos que hacer una idea de cómo es el proceso de arranque:

/sbin/init es el primer proceso y padre del resto.

El archivo de configuración del inicio /etc/inittab contiene: El runlevel por defecto, lanzar las terminales y otras opciones. Dependiendo del runlevel se entrará con una u otra configuración.

Vamos a ver un ejemplo en kubuntu del archivo de configuración del inicio /etc/inittab:

#Por defecto en kubuntu se entra con el runlevel 2
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# /etc/init.d executes the S and K scripts upon change of runlevel.
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

Importante: Los runlevel 0 y 6 tienen una función determinada en linux: Cerrar y reiniciar el sistema, respectivamente. En cambio, el resto de los runlevel, pueden configurarse para arrancar y parar determinados servicios. Ejemplo: El runlevel 0, que cierra el sistema, envía la señal terminar a todos los procesos, desactiva las particiones de intercambio, desmonta los sistemas de ficheros local y remoto, si lo hay, etc.

Con independencia del runlevel seleccionado se ejecutarán todos los script/servicios de

/etc/rcS.d/

El script /etc/init.d/rc recibe un argumento con el runlevel a arrancar. Va al directorio /etc/rcX.d/, donde X es el runlevel, y en dicho directorio hay enlaces simbólicos que apuntan a scripts en /etc/init.d que son los que realmente arrancan los servicios e inicializan el teclado, sincronizan el reloj hardware, etc

Los enlaces simbólicos en /etc/rcX.d empiezan por S o K (start) o (kill), seguidos de dos dígitos y apunta a un script con el mismo nombre pero sin S ni K ni los dos dígitos en /etc/init.d

Para que un servicio NO se cargue en el arranque cambiarle en /etc/rcX.d la S, de start, inicial por la K, de kill.

sudo mv SnombreServicio KNombreServicio

Para que SI se cargue :

sudo mv KNombreServicio SNombreServicio

Lo que hemos hecho es renombrar el enlace: sudo mv nombreantiguo nombrenuevo, o más exactamente en linux, mover el archivo dentro del mismo directorio con un nombre nuevo

En ambos casos incluir los dos dígitos entre S ó K y el nombre del servicio. Éste número indica el orden en que arrancará el servicio. A un número menor se arrancará antes que otro con uno mayor.

Si lo que queremos es parar o arrancar un servicio después del arranque del sistema:

/etc/init.d/nombreServicio start/stop

En ubuntu se puede utilizar el comando update-rc.d para hacer exactamente lo mismo:

sudo update-rc.d -f nombre_servicio remove

Y para ponerlo:

sudo update-rc.d nombre_servicio

En Suse se puede utilizar el comando insserv para hacer también exactamente lo mismo:

sudo insserv -r /etc/init.d/nombre_servicio

Y para ponerlo:

sudo insserv -d /etc/init.d/nombre_servicio

Además en ubuntu, para configurar los servicios, existe la herramienta BUM (Boot Up Manager) que esta en las secciones adicionales de Ubuntu. Él configura servicios o da las razones de porque no puede hacerse. (Gracias Eneried)

En Debian, para configurar los servicios, existe la herramienta rcconf, la cual selecciona/deselecciona los servicios con la barra espaciadora.

Las herramientas anteriores no funcionan en todas las distribuciones pero si se usa una distribución en particular que tiene una herramienta que nos facilita el trabajo sería erroneo no aprovecharlo.

Lo que hacen update-rc.d, insserv y rcconf es crear o borrar los enlaces directos en el directorio del runlevel por defecto para que arranquen o no. (Crear/borrar del directorio /etc/rcX.d el enlace a /etc/init.d)(En Suse de /etc/init.d/rcX.d el enlace a /etc/init.d)

Si por un error se borra el script de arranque de un servicio en /etc/init.d pero sigue su enlace en el runlevel por defecto /etc/rcX.d aparecerá un error en el inicio indicando que no puede leer el script XX no existe el fichero

* * *

Hay una manera más fácil de poner o quitar un servicio y de cambiar el runlevel de arranque desde el propio escritorio kde.

En kubuntu:

Menú Inicio, menú System Setting, icono System Services, botón Administrator Mode, aquí introduces tu contraseñ y te aparecerán todos los servicios, los arrancados y los parados, y el runlevel que tienes activo. Podrás cambiar ese runlevel eligiendo el que desees de una lista desplegable.

Más abajo verás los servicios en una lista con el nombre del servicio, si el servicio arranca o no con el arranque del sistema y el status actual, esto es, si está o no arrancado.

A la derecha hay una botón para marcar si deseamos que el servicio que tengamos seleccionado a la izquierda arranque o no cuando lo haga el sistema, si lo deseleccionamos no arrancará, Start during boot.

Y más arriba una descripción del servicio.

Saludos. Autor: ubaloie,

Agradecimientos: A Chaco del foro de www.ubuntu-es.org por sus aclaraciones tan acertadas y a lgsobalvarro, de www.kdelatino.org, por animarme a escribir éste pequeño tutorial; a Eneried del foro ubuntu-es por hacerme conocedor de la herramienta BUM para ubuntu.

Salvo que se indique otra cosa las partes de ésta obra están bajo una licencia de Creative Commons  Creative Commons License
(c) 2006-2007, el desarrollador de la Web: ubaloie