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.