¿Deshabilitar el inicio de un servicio en todos los niveles de ejecución?

61

Tengo un servicio fooque actualmente comienza en el nivel de ejecución 3 y superior. ¿Cómo puedo evitar que lo haga, sin usar update-rc.d foo stop 3 ., que (si lo entiendo correctamente) apagaría el servicio en cada cambio de nivel de ejecución?

(es decir, si estaba en el nivel de ejecución 1 y habilitado foo, cuando cambié al nivel de ejecución 3 estaría deshabilitado, ¿no?)

Ejecutando Debian GNU / Linux Lenny.

lfaraone
fuente

Respuestas:

57

El término "detener" no impide que el demonio se inicie, sino que lo apaga al ingresar el nivel de ejecución especificado.

Si lo que desea es eliminar un servicio / demonio de un solo nivel de ejecución, update-rc.dcomo se señaló bei Freiheit o simplemente eliminar el enlace simbólico desde /etc/rcX.d/donde X es su nivel de ejecución. Si no desea que el servicio se inicie automáticamente, update-rc.d -f foo removehará el truco.

PEra
fuente
2
¿Alguna idea de cómo hacerlo en Debian 8? sudo update-rc.d -f sunrpc removeNo funciona; sigue presente después de un reinicio.
Debian 9 Esto no estaba funcionando para mí, y luego me di cuenta, oh derp, necesito sudo. update-rc.d no ofrece comentarios si olvida sudo. ls /etc/rc*.d
Confirmé que
El comando falló en Ubuntu16.04
Stephane
Asegúrese de pasar el nombre de servicio correcto, update-rc.d no le da ningún comentario si no existe.
marcovtwout
¿Qué pasa si desea volver a habilitarlo más tarde? A continuación, la respuesta de @ "No ahora" es mejor, ya que puede deshabilitar y volver a habilitar después. update-rc.d apache2 disable
Wadih M.
54

Configure las aplicaciones de inicio de Linux con sysv-rc-conf :

apt-get install sysv-rc-conf

Como otros han señalado, aquí también está update-rc.d para la línea cmd.

Por ejemplo, ejecutar

update-rc.d apache2 disable

para deshabilitar apache2 de todos los niveles de ejecución.

Ahora no
fuente
gran herramienta, no lo sabía. ¡Gracias!
PEra
1
tenga en cuenta que esto no detendrá el servicio en ejecución, para lograr eso necesita agregar esto: service foo stopo reiniciar el servidor
rubo77
15

Corto:

No hay una forma confiable de hacer esto rápidamente.

Largo:

Debian actual (Debian inestable a partir del 2012-06-01) actualmente no tiene una forma confiable de deshabilitar consistentemente un servicio / demonio. - Debido a que una actualización de un paquete daemon ejecuta incondicionalmente "/etc/init.d/package restart", deshabilitándolo para este nivel de ejecución o no.

Para asegurarte de que un demonio no comience, puedes:

  • desinstalarlo
  • haga un desvío local del script /etc/init.d/xyz (de esta manera, ninguna herramienta lo encontrará)
  • usar / abusar de un archivo de configuración del paquete correspondiente para provocar una salida anticipada de ese script (por ejemplo, coloque una "salida" temprano en / etc / default / xyz en caso de que provenga del script de inicio)
  • busque en ese guión de inicio formas predefinidas "oficiales" para no iniciar ese demonio

Hay / hubo (?) Algún paso init-policy-something para los scripts de inicio en Debian, que se suponía que llenaba esta funcionalidad faltante. - Intenté usarlo, lo encontré complicado, encontré un error y nunca lo volví a tocar.

Actualizar:

Cambie a "systemd", una alternativa a "initd". Existe un paquete debian, y puede deshabilitar un servicio con algo como esto:

cd /etc/systemd/system
ln -s /dev/null xyz.service
Robert Siemer
fuente
1
+1 Esta es una respuesta muy útil, y si no me hubiera topado, me habría picado más tarde, ¡gracias!
¿Puedes tú unlink xyz.servicetambién?
jaggedsoft
@NextLocal, olvidé por qué escribí eso, pero creo que si un servicio tiene scripts de inicio del Sistema V, los usaré systemd. - Entonces el enlace le dice que no los busque.
Robert Siemer
Tenga en cuenta que editar el /etc/default/xyzarchivo para agregar un archivo exitno impedirá que el empaquetador sobrescriba el archivo con la versión correcta en la próxima actualización. (El paquete guarda los archivos de configuración y, en la mayoría de los casos, los scripts de inicio no se ven como tales). Por lo tanto, en la mayoría de los casos eso no ayudaría.
Alexis Wilke
Devuan viene al rescate: en lugar de systemd, adopta el sistema clásico SysV rc.d / init.d (o openrc también si alguien opta por eso).
Csaba Toth
5

Ejecute este comando

apt-get install rcconf

Una vez instalado, ejecute rcconf en SSH y recibirá un cuadro de diálogo que muestra todos los servicios configurados para ejecutarse en el arranque. Seleccione los que están presionando la barra espaciadora para deshabilitar / habilitar el particular y listo, simplemente haga clic en Aceptar y ese servicio no se molestará en comenzar de nuevo en el próximo arranque. Estar usando esto por años. Herramienta muy útil para usuarios de Debian / Ubuntu como yo.

Mark Levinsky
fuente
¡Tan fácil como 1,2,3! Gracias por esta pequeña herramienta de línea de comando.
DanielaWaranie
2

Estoy confundido con lo que intentas lograr.

¿En qué niveles de carrera quieres correr?

Si siempre quieres que se ejecute, usa update-rc.d foo defaults; eso lo detendrá en 0, 1 y 6, mientras lo deja en ejecución en 2, 3, 4 y 5. (1 no debe ejecutar nada más que un shell, 0 y 6 se detienen y reinician)

Si desea especificar exactamente en qué niveles de ejecución ejecutar:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .
freiheit
fuente
2

Creo que esto haría el trabajo: insserv -r foo

usuario38551
fuente
1

Comience a usar insserv de Debian7

Salida de todos los servicios e información de nivel de ejecución

insserv --showall

Eliminar los scripts listados de todos los niveles de ejecución

insserv --remove [specify_script]
cacao
fuente
0

En un sistema basado en Red Hat podría usar

chkconfig httpd off
chkconfig httpd --del

eliminar el servidor de los niveles de ejecución

en el sistema basado en Debian, se supone que todos los servicios deben iniciarse mediante los archivos que se encuentran en los directorios /etc/rc?.d/, estos archivos tienen un enlace simbólico a los archivos correspondientes en el directorio /etc/init.d/. Si desea que un servicio no se inicie de manera predeterminada, puede cambiarle el nombre / eliminarlo del directorio /etc/rc?.d y su cambio se conservará en la actualización del paquete siempre que uno de los enlaces de inicio siga apareciendo en uno de los otros directorios (3,4 y 5). O puede usar el comando update-rc.d para cambiar los enlaces y, si desea iniciar el servicio después, puede usar /etc/init.d/service_name start si deja el inicio al final. darle las opciones que se pueden usar como detener, reiniciar, recargar ...

Sin embargo, creo que puedes usar sysv-rc-conf para deshabilitarlo.

Roedor43
fuente
La pregunta está etiquetada Debian, no Fedora o Red Hat.
0
sudo update-rc.d SERVICE disable

Si desea especificar niveles de ejecución.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

Recuerde cambiar el servicio al nombre del programa.

sudo service SERVICE restart
Eddie
fuente
0

¿Por qué no hace una copia de seguridad del script de inicio en otro lugar y lo elimina en /etc/init.d/? Si la actualización-rc.d no funciona.

Kosaka Honoka
fuente