¿Cómo habilitar o deshabilitar los servicios?

820

Leí sobre cómo habilitar y deshabilitar los servicios en Ubuntu y parece que hay diferentes posibilidades para administrarlos.

El primer método que encontré es update-rc.dagregar nuevos servicios al inicio, que apunta a la /etc/init.dcarpeta y su contenido.

El otro que encontré es editar .confarchivos en la /etc/initcarpeta.

¿Cuál es la forma recomendada para habilitar / deshabilitar / agregar servicios y por qué?

¿Podría dar un breve ejemplo paso a paso a prueba de balas sobre cómo agregar un servicio en Ubuntu y habilitarlo y deshabilitarlo?

NES
fuente
1
Para establecer contactos, consulte: askubuntu.com/questions/230698/…
Jorge Castro el
Esto sería útil para aquellos atrapados en Fedora 12 y que hayan aterrizado aquí. En caso de que linkrot chkconfigsea ​​lo que estás buscando.
Sangrado de los dedos
3
Tenga en cuenta que la respuesta para Ubuntu 14.04 todavía falta aquí.
Reinier Post
2
@MarcelloNuccio: a partir de Ubuntu 15.04, Upstart ha quedado en desuso a favor de Systemd.
Dan Dascalescu
Los programas de inicio automático se configuran en autostartmanifiestos o en *.servicearchivos en varias ubicaciones, así como en init.do crontab. Ver: unix.stackexchange.com/a/525845/43233
Noam Manos

Respuestas:

831

Hay servicios que se pueden habilitar / deshabilitar utilizando la GUI (como la startupaplicación) o el terminal.

Para la Terminal tienes varias opciones. Primero, abra un terminal (escriba "terminal" en el tablero, por ejemplo, y ábralo). Entonces:

Servicios temporales de activación / desactivación

Para detener e iniciar los servicios temporalmente (no los habilita / deshabilita para futuras botas), puede escribir service SERVICE_NAME. Por ejemplo:

  • sudo service apache2 stop( DETENDRÁ el servicio Apache hasta que se reinicie o hasta que lo inicie nuevamente).

  • sudo service apache2 start( INICIARÁ el servicio Apache suponiendo que se haya detenido antes).

  • service apache2 status (Le indicará el ESTADO del servicio, si está habilitado / en ejecución o deshabilitado / NO en ejecución).

  • sudo service apache2 restart( REINICIARÁ el servicio. Esto se usa más comúnmente cuando ha cambiado, un archivo de configuración. En este caso, si cambió una configuración de PHP o una configuración de Apache. Reiniciar le ahorrará tener que parar / comenzar con 2 líneas de comando )

  • service apache2(En este caso, dado que no mencionó la ACCIÓN a ejecutar para el servicio, le mostrará todas las opciones disponibles para ese servicio específico). Este aspecto varía según el servicio, por ejemplo, con MySQL solo mencionaría que le falta un parámetro Para otros servicios como el servicio de red, mencionaría la pequeña lista de todas las opciones disponibles.


SYSTEMD

A partir de Ubuntu 15.04, Upstart quedará en desuso a favor de Systemd. Con Systemd para administrar los servicios podemos hacer lo siguiente:

systemctl start SERVICE- Úselo para iniciar un servicio. No persiste después de reiniciar

systemctl stop SERVICE- Úselo para detener un servicio. No persiste después de reiniciar

systemctl restart SERVICE - Úselo para reiniciar un servicio

systemctl reload SERVICE - Si el servicio lo admite, volverá a cargar los archivos de configuración relacionados sin interrumpir ningún proceso que esté utilizando el servicio.

systemctl status SERVICE- Muestra el estado de un servicio. Indica si un servicio se está ejecutando actualmente.

systemctl enable SERVICE- Activa el servicio, en el próximo reinicio o en el próximo evento de inicio. Persiste después del reinicio.

systemctl disable SERVICE- Desactiva el servicio en el próximo reinicio o en el siguiente evento de parada. Persiste después del reinicio.

systemctl is-enabled SERVICE - Compruebe si un servicio está configurado actualmente para iniciarse o no en el próximo reinicio.

systemctl is-active SERVICE - Compruebe si un servicio está actualmente activo.

systemctl show SERVICE - Mostrar toda la información sobre el servicio.

sudo systemctl mask SERVICE- Desactivar completamente un servicio al vincularlo a /dev/null; no puede iniciar el servicio manualmente ni habilitarlo.

sudo systemctl unmask SERVICE- Elimina el enlace /dev/nully restablece la capacidad de habilitar o iniciar manualmente el servicio.


UPSTART (en desuso desde 15.04)

Si queremos usar la forma oficial de Upstart (tenga en cuenta que, por el momento, no todos los servicios se han convertido a Upstart), podríamos usar los siguientes comandos:

status SERVICE- Esto nos dirá si un servicio convertido se está ejecutando o no. Tenga en cuenta que esto está en desuso en favor de start, stop, statusy restart. También nos dirá si un servicio aún no se ha convertido en un sistema de arranque:

Un servicio convertido normalmente generará el estado actual (Inicio, Ejecución, Detención ...) y la ID del proceso. Un servicio no convertido daría un error sobre un trabajo desconocido .

Algunos accesos directos solo pueden funcionar con el servicecomando anterior, pero no con los comandos a continuación, a menos que se conviertan al 100% en servicios de arranque:

  • INICIO -sudo start mysql

  • PARAR -sudo stop mysql

  • REINICIAR -sudo restart mysql

  • ESTADO -sudo status smbd

Habilitar / deshabilitar un servicio

Para activar o desactivar un servicio de forma permanente, deberá:

echo manual | sudo tee /etc/init/SERVICE.override

donde la estrofa manualimpedirá que Upstart cargue automáticamente el servicio en el próximo arranque. Cualquier servicio con el .overridefinal tendrá prioridad sobre el archivo de servicio original. Solo podrá iniciar el servicio manualmente después. Si no desea esto, simplemente elimine el .override. Por ejemplo:

echo manual | sudo tee /etc/init/mysql.override

Pondrá el servicio MySQL en manualmodo. Si no quieres esto, luego puedes simplemente hacer

sudo rm /etc/init/mysql.override

y reinicie para que el servicio se inicie automáticamente nuevamente. Por supuesto, para habilitar un servicio, la forma más común es instalarlo. Si instala Apache, Nginx, MySQL u otros, se iniciarán automáticamente al finalizar la instalación y se iniciarán cada vez que se inicie la computadora. La desactivación, como se mencionó anteriormente, hará uso del servicio manual.

Luis Alvarado
fuente
¿Necesita agregar .servicea cada comando? systemctl mongod statusfuncionó bien.
Dan Dascalescu
@DanDascalescu no, no, pero déjame aclarar eso allí.
Luis Alvarado
44
¿Debería colocarse el archivo .override en /etc/init.d/, es decir, dónde se ubica el servicio?
Obi Wan - PallavJha
¿Por qué Upstart está en desuso en 15.04? ¿Cuál es la forma correcta de ejecutar scripts al iniciar / reiniciar en ubuntu 16.04 o posterior?
Kamalakannan J
1
Gracias por esta respuesta integral. El systemdconjunto de comandos funciona de maravilla en Ubuntu 18.04.
Doktor J
354

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.dy luego usar el update-rc.dcomando (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##xxxxy comenzarán con los nombres de archivo S##xxxx. El ##en S##xxxxmedio de una "orden de salida" para el servicio xxxx. Por el contrario, el ##de K##xxxxlos 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/initpara 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, apache2no se ha convertido a upstart . Entonces, para deshabilitarlo apache2solo 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.dcomando. 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 oncondició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 <[email protected]>"

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 ony stop onestrofas: 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 overridearchivo para deshabilitar un servicio sin editar la definición del trabajo, simplemente colocando la manualpalabra clave en él.

SpamapS
fuente
20
Parece que 11.04 también tiene anulación. Por echo manual >> /etc/init/<service>.overridelo tanto, se prefiere ya que deja intacto el filtro original .conf. De todos modos, sigue siendo una pena que una habilitación / deshabilitación tan básica tardó 3 años en desarrollarse, y no hay GUI para eso.
MestreLion
3
update-rc.d es lo que realmente importa
Timofey
2
parece mucho más manejar el tema original que la respuesta que ha sido etiquetada como la respuesta definitiva por el póster original de la pregunta. ¡Gracias! :)
Henning
1
En mi caso, el archivo /etc/init/ssh.confexiste, pero status sshy status sshdambos dicen "trabajo Desconocido". ¿Esta respuesta no parece abordar tal posibilidad?
Brian Z
1
status sshtambién me da ' service ssh status
Trabajo
129

sysv-rc-conf

Intenta usar sysv-rc-conf

sudo apt-get install sysv-rc-conf

y para comenzar a administrar los servicios, ejecute

sudo sysv-rc-conf

Lo que abrirá una ventana interactiva como esta

ingrese la descripción de la imagen aquí

Puede navegar más a través de las páginas usando la Ctrl+npágina siguiente y la Ctrl+ppágina anterior. Puede habilitar y deshabilitar los servicios seleccionando SPACElos niveles de ejecución deseados.

Empleos-Admin

Otra alternativa sería Jobs-Admin al instalar a través de

sudo apt-get install jobs-admin

Que también proporciona una GUI como esta

Vista previa de jobs-admin

Para mostrar más trabajos, debe marcar Mostrar trabajos protegidos en su menú.

chkconfig

Y la tercera opción sería chkconfig ,

sudo apt-get install chkconfig

Se puede usar a través de CLI chkconfig, que muestra la lista de trabajos de encendido / apagado. También podemos ver los servicios del sistema usandochkconfig –list

Los servicios se pueden activar usando

chkconfig <service> on

Los servicios se pueden desactivar usando

chkconfig <service> off

E incluso podemos agregar nuestro propio servicio, utilizando un script de inicio adecuado con encabezados adecuados.

chkconfig --add <service>

update-rc.d

Y otra opción se puede consultar aquí update-rc.d , explicada brevemente aquí .

Tenga en cuenta que para Ubuntu Server 12.04, update-rc.d se usa en lugar de chkconfig.

atenz
fuente
1
en el servidor ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned
@pwned Usted es libre de editar y publicar la información actualizada sobre la edición del servidor. Gracias.
atenz
Hice lo que usted sugirió, ahora depende de la revisión por pares.
pwned
jobs-admin no permite cambiar de trabajo (Ubuntu 14.04), produciendo un informe de falla en su lugar ;-)
Sadi
55
sysv-rc-conf no es adecuado para su uso con el sistema de arranque o systemd, es evidente que solo es para el antiguo sistema System 5 rc, que no ha sido el predeterminado en Ubuntu Linux durante casi una década. Debian Bug # 791689 reconoce esto y cuestiona por qué no se ha marcado como conflictivo con systemd.
JdeBP
48

Para aquellos de nosotros que ejecutamos Ubuntu sobre ssh, creo que la mejor opción es rcconfun programa basado en texto:

sudo apt-get install rcconf
sudo rcconf

texto alternativo

Navegue con las teclas de tabulación y flecha, presione la barra espaciadora para habilitar / deshabilitar. Los cambios son persistentes en todos los reinicios.

Captura de pantalla tomada de esta publicación de blog , que también muestra sysv-rc-conf: una herramienta similar que también te permite establecer el nivel de ejecución. (Para aquellos que se preocupan lo suficiente por los niveles de ejecución como para desear cambiarlos :)

Desafortunadamente, rcconf no funciona con upstart (servicios listados en /etc/init/*), solo con el mecanismo tradicional ( ls -l /etc/init.d/*- los que no son enlaces simbólicos).

Afortunadamente, muchos de los servicios que son relevantes cuando se envían a un servidor (Apache, Tomcat, mdadm, boinc-client ...) aún no se han movido a la fase inicial.

jg-faustus
fuente
66
¿Esto todavía funciona con advenedizo?
oKtosiTe
3
Lamentablemente no. Pero ha funcionado para todos los casos que he querido cambiar: los trabajos iniciales parecen ser en su mayoría cosas que nunca quiero deshabilitar: reloj de hardware, daemon de registro, red, etc. (al menos en el servidor Ubuntu). Pero es algo a tener en cuenta (no estaba :), he actualizado la publicación.
jg-faustus
Lamentablemente mysql se convirtió en advenedizo. Y ese es un servicio que solo uso cuando estoy haciendo algún proyecto.
MestreLion
Hay un error con rcconf en Ubuntu 12.04 que impide que el programa se inicie. Para resolver el problema, debe instalar el paquete de diálogo.
devius
1
Como esta respuesta se escribió, update-rc.dse modificó y se eliminó parte de su funcionalidad obsoleta . El error de Debian # 727735 señala que rcconf no se cambió para coincidir. Y no, rcconf tampoco funciona con systemd, por lo que no es aplicable a ninguno de los sistemas init predeterminados para Ubuntu Linux durante la última década.
JdeBP
18

Descubrí que existe esta herramienta GUI, algo así como BUM pero compatible con Upstart:

  • Empleos-Admin

    sudo apt-get install jobs-admin
    
Postadelmaga
fuente
Pero es demasiado simple y no permite cambiar los "trabajos protegidos" (¿qué son esos trabajos? ¡Apple tiene empleos, el sistema operativo tiene demonios!)
kakaz 19/12/2013
Ni siquiera permito cambiar "trabajos desprotegidos" (Ubuntu 14.04), produciendo un informe de falla en su lugar ;-)
Sadi
12

Editar el archivo de configuración inicial existente (como se describió anteriormente) no es una buena idea. Un paquete actualizado podría proporcionar una configuración actualizada, y tendría que repetir sus cambios una y otra vez.

Echando un vistazo a man 5 inituno encontrará una solución más apropiada: usar una configuración de anulación. Breve ejemplo: supongamos que tenemos un servicio llamado "foobar", por lo que habría un archivo llamado /etc/init/foobar.confcon su configuración inicial. Ahora no desea eliminar ese archivo ni modificarlo, pero ¿tampoco desea que se ejecute este servicio? Por tanto, coloca una anulación de archivo junto a él: /etc/init/foobar.override, que contiene (opcionalmente la cabecera con la descripción y) en lugar de los start on/ stop onlas líneas se coloca una línea con una palabra: manual. De esta manera, le dice a upstart que básicamente use el foobar.conf, pero anule la definición de inicio para iniciar ese servicio solo cuando se aplica manualmente (a través de service foobar starten nuestro ejemplo).

Izzy
fuente