Ubuntu12.04: Cómo deshabilitar un proceso demonio al inicio


23

Normalmente uso service start/stopo initctl start/stoppara iniciar o detener un proceso de demonio, pero ahora lo que estoy buscando es desactivar un proceso de demonio para que no se inicie en el ejemplo de inicio mysqld.

Actualmente lo que estoy haciendo es el cambio de nombre /etc/init/mysql.confa /etc/init/mysql.conf.bakpero después de leer un poco sobre systemdllegué a conocer que proporciona enable & disablela opción para la tarea anterior.

Entonces, ¿hay algo similar en ubuntu 12.04 con upstart.


¿Dices que estás usando systemd? Lo uso en mi computadora Fedora 17. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe

1
@BenjiWiebe: No, no estoy usando systemd. Estoy usando upstart porque systemd no es el predeterminado en ubuntu 12.04 / 12.10.
RanRag

1
Oh, ya veo ... No estoy seguro de lo que estaba pensando.
BenjiWiebe

Respuestas:


26

Puede deshabilitar los servicios ejecutando el siguiente comando:

sudo update-rc.d -f <service name> disable

Extracto de la página de manual:

Cuando se ejecuta con las opciones de desactivación [S | 2 | 3 | 4 | 5], update-rc.d modifica los enlaces de nivel de ejecución existentes para el script /etc/init.d/name al renombrar los enlaces de inicio para detener los enlaces con un número de secuencia igual a la diferencia de 100 menos el número de secuencia original.


2
No tengo suficiente reputación para rechazar este voto y hacerlo sin una explicación sería descortés de todos modos, así que solo un comentario: la pregunta de @Noob se refiere a Ubuntu 12.04 que usa Upstart (/etc/init/*.conf configuration archivos) para la mayoría de los demonios del sistema (como lo menciona @Noob), mientras que su sugerencia solo funciona para los demonios que comenzaron a usar scripts en /etc/init.d/* (el antiguo estilo SysV). Editar: Para el registro, warl0ck tiene la respuesta correcta (¡gracias!).
xolox

3
La pregunta es sobre una situación hipotética o en general usando mysql como un caso tópico particular. OP parecía al menos parcialmente consciente de esta respuesta, pero puede ser útil para la posteridad tener en cuenta que algunos paquetes útiles no respetan el formato inicial (como webmin y muchos paquetes autoconstruidos a partir de la fuente en el momento del comentario) . Eso significa que este método puede ser una respuesta parcial válida para el contexto, al igual que warl0ck y las respuestas de Mark para abordar el punto particular del hipotético servicio mysql instalado con un administrador de paquetes.
JustinC

La bandera -f no es necesaria.
dannyman

20

La forma correcta de deshabilitar y reiniciar el servicio es crear un archivo XX.override,

echo 'manual' > /etc/init/mysqld.override

De esa forma, el servicio de inicio no se iniciará automáticamente


¿Esto todavía funciona con Ubuntu 12.04?
RSK

@RSK sí, ¿por qué no lo intentas?
margarita

1
Lo intenté y no funcionó para mí. Déjame intentarlo de nuevo y te actualizará.
RSK

No, no funciona en Ubuntu-14.04.
Hola-Angel

1
@RSK yes, why don't you just give it a try?Supongo, porque es muy inconveniente reiniciar el sistema con "una prueba" a cada consejo de esta página.
user907860

7

@ warl0ck tiene razón; quería agregar que esta información se documenta bastante bien en la documentación de Upstart: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Específicamente:

Con Upstart 1.3, puede utilizar archivos de anulación y la estrofa manual para lograr el mismo resultado de una manera más simple [27]:

# echo "manual" >> /etc/init/myjob.override

Tenga en cuenta que podría lograr el mismo efecto haciendo esto:

# echo "manual" >> /etc/init/myjob.conf

Sin embargo, el uso de la función de anulación significa que puede dejar intacto el archivo de configuración de trabajo original.

Para volver al comportamiento original, elimine o cambie el nombre del archivo de anulación (o elimine la estrofa manual de su archivo ".conf").


5

También hay una buena pieza de software para ayudar en esto. Se llama rcconf.

Simplemente descárguelo usando:

sudo apt-get install rcconf

y úsalo con el comando

rcconf

Obtiene una interfaz agradable (línea de comandos) para deshabilitar / habilitar servicios.


Esto no está incluido en el sistema, por lo que instalar más cosas no sería la mejor respuesta.
m3nda

pero realmente útil: D
Magico

1

Intente navegar /etc/rc2.dy renombrar lo que no desea ejecutar al inicio: cambie la "S" (inicial, mayúscula) a una "K" (por ejemplo, S02mysqla K02mysql). Si cambia de opinión, simplemente inviértalo. Creo que el 2 se refiere al nivel de ejecución, en cuyo caso 2 es el nivel de ejecución multiusuario predeterminado. Probablemente ahí es donde tienes la mayoría de las cosas para el uso diario de la computadora.

Editar : Lea el comentario de James O'Gorman a continuación.


1
Sí '2' se refiere al nivel de ejecución. Puede verificar su nivel de ejecución actual usando who -ro runlevel.
RanRag el

Eso es cierto, who --runlevel.
Emanuel Berg

1
Si bien esto logra lo que quieres, técnicamente es lo incorrecto. En términos de inicio de SysV, los scripts 'S' son scripts de inicio y 'K' son scripts de eliminación, es decir, S se ejecutan en orden al inicio y K se ejecutan en orden al cierre (o cambian a un nivel de ejecución inferior).
James O'Gorman el

@ JamesO'Gorman: Interesante, estoy en Debian, ¿estás diciendo que mis "scripts K" se ejecutan al cerrar? ¿Hay alguna carta que pueda usarse para desactivar el script por completo, sin ningún peligro? (Es práctico mantenerlos en la misma carpeta, en caso de que surja una nueva situación donde los desee.)
Emanuel Berg,

@EmanuelBerg Sí, initejecutará 'KXXscript stop' al cerrar. Debe eliminar el enlace simbólico o eliminar el bit de ejecución del script de inicio real. Creo que Debian usa update-rc.dpara manejar esto. Uso de RHEL (y derivados) chkconfig.
James O'Gorman el

0

Con Upstart, la configuración del servicio se encuentra en los archivos /etc/init/. Por ejemplo, ssh se controla mediante un archivo de configuración/etc/init/ssh.conf

Este archivo especifica los "eventos" que harán que Upstart inicie el "trabajo".

Para evitar que un servicio se inicie automáticamente, se puede usar uno de varios métodos:
a) Cambie el nombre del archivo service.conf para que no termine con .conf
b) Comente la línea "inicio en" del archivo service.conf.

En las versiones más recientes de upstart (desde v1.3 al menos) también puede anular el inicio en línea usando un archivo service.override, por lo que podría usar:
# echo manual > /etc/init/service.override

Por último, también puede agregar la palabra clave "manual" al final del archivo de configuración del servicio, por ejemplo, a través de:
# echo manual >> /etc/init/service.conf

Tenga en cuenta que esto no "detiene" el servicio en ejecución, solo evita que se inicie automáticamente. Mientras está configurado para el inicio "manual", controla el servicio usando initctl, por ejemplo, para detener e iniciar el demonio SSH:
# initctl stop ssh
# initctl start ssh

Podría decirse que la mejor documentación para Upstart está en http://upstart.ubuntu.com/cookbook/

La Sección 11.44 cubre "deshabilitar un servicio de inicio automático, aquí: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting


0

Bueno, debo decir que la declaración

echo "manual" >> /etc/init/myjob.override

es un poco engañoso porque significa agregar el archivo de anulación. Probé esto en 14.04 con el administrador de red y lo siguiente no funcionó

vim /etc/init/network-manager.override:
start
manual

Sin embargo esto funcionó

vim /etc/init/network-manager.override:
#start
manual

Entonces, en mi opinión, initctl busca la primera línea no comentada y la ejecuta. Quizás estoy equivocado, pero esos fueron los resultados de mi prueba. Las entradas son bienvenidas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.