Habilitar archivos de unidad 'vinculados' en Systemd

10

Todavía me estoy familiarizando con systemd y me he encontrado con algo. No es tanto un problema, pero me gustaría aprender más sobre cómo es esto. No pude encontrar ninguna referencia a esto en otra parte.

En primer lugar, entiendo que los archivos de unidad personalizados para los servicios deben entrar /etc/systemd/system. Sin embargo, sería bueno para la administración de nuestros servidores si los archivos de la unidad pudieran ubicarse en otro lugar.

En la documentación, vi que puede 'vincular' archivos de unidad de esta manera:

systemctl link /path/to/servicename.service

Esto creará un enlace a lo anterior en /etc/systemd/system. Ahora puede iniciar / detener este servicio. En la superficie, esto nos pareció una buena manera de administrar nuestros servicios.

Sin embargo, intentar habilitar un archivo de unidad 'vinculado' de este tipo produce un error:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

Usando exactamente el mismo archivo de unidad, pero copiado en /etc/systemd/systemlugar de enlazado, obtienes:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

A partir de esto, parece que no es posible habilitar los enlaces en los archivos de la unidad para ser llamados al inicio del sistema.

Si este es el caso, ¿cuál es el punto de la funcionalidad 'enlace'? De los documentos, dice:

enlace FILENAME

Enlace un archivo de la unidad que no está en las rutas de búsqueda del archivo de la unidad en la ruta de búsqueda del archivo de la unidad. Esto requiere una ruta absoluta a un archivo de unidad. El efecto de esto se puede deshacer con deshabilitar. El efecto de este comando es que hay un archivo de unidad disponible para iniciar y otros comandos, aunque no está instalado directamente en la ruta de búsqueda de la unidad.

Tom17
fuente

Respuestas:

13

La página del manual es engañosa.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

El primero te permite hacerlo systemctl start myservice. El segundo hace posible myserviceque se inicie automáticamente (que, como señaló @Julien, agrega automáticamente el link).

Creo que ... he estado tratando de entender esto todo el día.

Auspex
fuente
1
tenga en cuenta que systemctl enabletambién lo hará systemctl link, así que no es necesario escribir los 2 comandos ;-)
Julien
@Julien Oh, ¿dónde estabas cuando escribí esto el año pasado :-) Creo que finalmente me di cuenta de eso el mes pasado!
Auspex
9

Al habilitar un servicio desde otra ruta que no sea la ruta predeterminada, debe usar la ruta completa. Habilitar también creará el enlace para usted:

systemctl enable /root/myservice.service

Una vez habilitado, puede iniciar / detener / estado con el nombre del servicio

systemctl start myservice

Algunas advertencias aquí:

nickvane
fuente