Actualmente, hay tres formas diferentes de iniciar el software como un servicio en Ubuntu, SysV, Advenedizo y systemd. Un servicio se define aquí como un programa ejecutado por el sistema en segundo plano, en oposición a uno iniciado y ejecutado directamente por el usuario.
SysV
La forma tradicional de iniciar servicios en Linux era colocar un script en /etc/init.d
, y luego use el update-rc.d
comando (o en distribuciones basadas en RedHat, chkconfig
) para activarlo o desactivarlo.
Este comando utiliza una lógica ligeramente complicada para crear enlaces simbólicos en /etc/rc#.d
, que controlan el orden de inicio de los servicios. Si corres ls /etc/rc2.d
puede ver el orden en que se eliminarán los servicios con un nombre de archivo como K##xxxx
y comenzó con nombres de archivos S##xxxx
. El ##
en S##xxxx
significa una "orden de inicio" para el servicio xxxx
. Por el contrario, el ##
en K##xxxx
significa la orden de muerte para el servicio xxxx
.
Un problema importante con SysV fue eso al arrancar el sistema, todo tenía que hacerse en serie, una cosa tras otra, lo que hacía que los tiempos de arranque del sistema fueran realmente lentos. Se hicieron intentos para paralelizar esto, pero fueron fortuitos y difíciles de aprovechar al máximo. Esta fue la razón principal por la que Advenedizo fue creado.
Advenedizo
Upstart utiliza archivos de definición de trabajo en /etc/init
definir en qué eventos se debe iniciar un servicio. Por lo tanto, mientras el sistema se está iniciando, upstart procesa varios eventos y luego puede iniciar múltiples servicios en paralelo. Esto les permite utilizar completamente los recursos del sistema, por ejemplo, iniciando un servicio vinculado al disco mientras se ejecuta otro servicio vinculado a la CPU, o mientras la red espera a que se asigne una dirección IP dinámica.
Puede ver todos los archivos de trabajo de upstart ejecutando ls /etc/init/*.conf
Permítanme detenerme aquí y decir que si no sabe qué es un servicio o qué hace, ¡NO lo desactive!
No todos los servicios se han convertido a upstart. Mientras trabajaba en el equipo de servidores de Canonical durante los últimos meses, he trabajado en una serie de archivos de trabajo convertidos, y la mejor parte es que permite deshacerse de toda la "magia" de los scripts y simplemente poner algunos comandos aquí y allá para definir exactamente cómo iniciar el servicio, y nada más. Pero por ahora, solo un puñado de servicios de red tradicionales, como calamares y samba, han sido convertidos.
¿Es un servicio basado en advenedizos?
Para averiguar si un servicio está basado en advenedizos, puede ejecutar el comando de estado:
status servicename
Si es un advenedizo job, mostrará esto:
$ status statdstatd start/running, process 942
Pero si no lo es, verás algo más como esto:
$ status apache2status: Unknown job: apache2
En este caso, apache2
no se ha convertido advenedizo. Por lo tanto, para desactivar apache2
solo corres
sudo update-rc.d apache2 disablesudo service apache2 stop
Deshabilitar servicios (trabajos) en upstart
Las definiciones de trabajo de Upstart no tienen un update-rc.d
comando. Para deshabilitar el trabajo, debe editar el archivo de trabajo directamente para deshabilitarlo. Hay dos maneras de hacer esto.
Si aún desea poder iniciarlo manualmente, debe comentar el start on
condición. Digamos que quieres instalar samba, pero no que se inicie automáticamente. Aquí está el archivo de trabajo (en natty):
description "SMB/CIFS File Server"author "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-start script RUN_MODE="daemons" [ -r /etc/default/samba ] && . /etc/default/samba [ "$RUN_MODE" = inetd ] && { stop; exit 0; } install -o root -g root -m 755 -d /var/run/sambaend scriptexec smbd -F
Desactivar samba, puedes poner un #
en frente de la"start on local-filesystems
". Tenga en cuenta que, si bien no se iniciará de nuevo en el arranque, aún debe detenerlo esta vez con
sudo service smbd stop
Si, sin embargo, nunca quieres samba para empezar, sugeriría eliminar el paquete. Sin embargo, si lo desea instalado, pero no iniciable, también puede hacer:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Deshabilitar un servicio usando la estrofa de inicio/parada (a partir de 11.04)
A partir de la versión de upstart que estará en 11.04, hay una nueva palabra clave que deshabilita el start on
y stop on
estrofas: manual
. Entonces, otra forma de deshabilitar el servicio a partir de 11.04 es hacer:
echo 'manual' | sudo tee /etc/init/mysql.override# command from root shellecho manual >> /etc/init/mysql.override
Puede crear una override
archivo para deshabilitar un servicio sin editar la definición de trabajo, simplemente poniendo el manual
palabra clave en ella.