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/system
lugar 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.
systemctl enable
también lo harásystemctl link
, así que no es necesario escribir los 2 comandos ;-)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:
Una vez habilitado, puede iniciar / detener / estado con el nombre del servicio
Algunas advertencias aquí:
fuente