Cómo deshabilitar un servicio sin usar 'systemctl disable'

12

Hay un servicio que quiero ejecutar solo cuando falla otro servicio ( [Unit] OnFailure=foo), pero no quiero que este servicio ( foo) se inicie automáticamente en el arranque. Se está ejecutando una opción systemctl disable foo, pero estoy buscando otra forma.

Antecedentes: estoy creando una imagen del sistema operativo y no quiero tener que arrancar la máquina, ejecutar ese comando ( systemctl disable foo) y luego apagarla antes de declarar mi imagen final.

tshepang
fuente

Respuestas:

4

Todos los servicios están "deshabilitados" de forma predeterminada; "habilitación" es opt-in.

Si foo.servicees su servicio personalizado, no se iniciará a menos que sea explícitamente atraído por algo (como la OnFailure=directiva), y no debe "deshabilitar" nada.

intelfx
fuente
¿Entonces básicamente "obtienes esta funcionalidad gratis" a menos que foo haya sido habilitado previamente?
rogerdpack
26

systemctl enablefunciona manipulando enlaces simbólicos en /etc/systemd/system/(para demonios del sistema). Cuando prestas enableun servicio, observa las WantedBylíneas de la [Install]sección y coloca enlaces simbólicos en esos .wantsdirectorios.

systemctl disable hace lo contrario

Simplemente puede eliminar esos enlaces simbólicos; hacerlo a mano es totalmente equivalente a usar systemctl disable.

derobert
fuente
Este sería un servicio que systemd aún no ha ejecutado (es personalizado), por lo que no habría ninguno de esos enlaces simbólicos adicionales. ¿Supongo que se crearían en el primer arranque?
tshepang
3
@Tshepang no debería habilitarse a menos que lo habilites manualmente (o en un script, por supuesto)
derobert
1
Oh, supuse que se habilitaría automáticamente (que es algo que he esperado al instalar paquetes Debian). Bueno saber.
tshepang
3
@Tshepang esa es la secuencia de comandos postinst en el paquete haciendo una habilitación. O supongo que enviar los enlaces simbólicos en el paquete, no estoy seguro de si lo hacen.
derobert
4

Puede usar systemctl start ServiceName.servicey systemctl stop Service.Name.servicepara iniciar y detener un servicio respectivamente. A diferencia de systemctl enable ...y systemctl disable ..., los comandos de inicio y detención solo duran la sesión actual, por lo tanto, cuando reinicia la máquina, los cambios no se guardarán.

tshepang
fuente