Actualmente hay tres formas diferentes de iniciar el software como servicio en Ubuntu, SysV , Upstart y systemd . Un servicio se define aquí como un programa ejecutado por el sistema en segundo plano, en lugar de uno iniciado y ejecutado directamente por el usuario.
SysV
La forma tradicional de iniciar servicios en Linux era colocar un script /etc/init.d
y luego usar el update-rc.d
comando (o en distribuciones basadas en RedHat chkconfig
) para habilitarlo o deshabilitarlo.
Este comando utiliza una lógica ligeramente complicada para crear enlaces simbólicos /etc/rc#.d
, que controlan el orden de inicio de los servicios. Si ejecuta ls /etc/rc2.d
, puede ver el orden en que los servicios se eliminarán con un nombre de archivo como K##xxxx
y comenzarán con los nombres de archivo S##xxxx
. El ##
en S##xxxx
medio de una "orden de salida" para el servicio xxxx
. Por el contrario, el ##
de K##xxxx
los medios del orden de interrupción de servicio xxxx
.
Un problema importante con SysV fue que 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. Esta fue la razón principal por la que se creó Upstart .
Advenedizo
Upstart utiliza archivos de definición de trabajo /etc/init
para definir en qué eventos se debe iniciar un servicio. Por lo tanto, mientras el sistema se inicia, el proceso de arranque procesa varios eventos y luego puede iniciar varios servicios en paralelo. Esto les permite utilizar completamente los recursos del sistema, por ejemplo, al iniciar un servicio vinculado al disco mientras se ejecuta otro servicio vinculado a la CPU, o mientras la red está esperando que se asigne una dirección IP dinámica.
Puede ver todos los archivos de trabajo de inicio ejecutando ls /etc/init/*.conf
Permítanme parar aquí y decir que si no saben qué es un servicio o qué hace, ¡NO lo deshabiliten!
No todos los servicios se han convertido en advenedizos. Mientras trabajaba en el equipo del servidor en Canonical durante los últimos meses, trabajé en varios archivos de trabajo convertidos, y la mejor parte es que permite deshacerse de toda la "magia" del script y simplemente poner pocos 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 el calamar y la samba , se han convertido.
¿Es un servicio basado en el arranque?
Para saber si un servicio está basado en el arranque, puede ejecutar el comando de estado:
status servicename
Si es un trabajo inicial , mostrará esto:
$ status statd
statd start/running, process 942
Pero si no es así, verá algo más como esto:
$ status apache2
status: Unknown job: apache2
En este caso, apache2
no se ha convertido a upstart . Entonces, para deshabilitarlo apache2
solo ejecute
sudo update-rc.d apache2 disable
sudo service apache2 stop
Deshabilitar servicios (trabajos) en el advenedizo
Las definiciones de trabajo de inicio 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 la start on
condición. Digamos que quiere instalar samba , pero no quiere 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-filesystems
stop on runlevel [!2345]
respawn
pre-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/samba
end script
exec smbd -F
Para deshabilitar samba , puede poner un #
frente a " start on local-filesystems
". Tenga en cuenta que si bien no se iniciará una copia de seguridad en el arranque, aún debe detenerlo esta vez con
sudo service smbd stop
Sin embargo, si nunca desea que comience la samba , le sugiero que elimine el paquete. Sin embargo, si desea instalarlo, pero no se puede iniciar, también puede hacer lo siguiente:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Deshabilitar un servicio usando la stanza start / stop (a partir del 11.04)
A partir de la versión de advenedizo que estará en 11.04, hay una nueva palabra clave que desactiva el start on
y stop on
estrofas: manual
. Entonces, otra forma de deshabilitar el servicio a partir del 11.04 es hacer:
echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
Puede crear un override
archivo para deshabilitar un servicio sin editar la definición del trabajo, simplemente colocando la manual
palabra clave en él.