Por ejemplo, tengo un servicio nombrado mysshd.service
en el /usr/lib/systemd/system/
directorio. ¿Puedo crear un enlace simbólico como:
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
para que cualquier operación que haga con fool.service se refleje en mysshd.service
( systemctl enable/disable start/stop fool.servce
)?
Mi propósito es sobrescribir el servicio sshd nativo mediante un enlace simbólico de mi propio servicio sshd.
Respuestas:
Hasta donde yo sé, systemd no se ocupará de esto particularmente bien. Según tengo entendido, desea anular el comportamiento de
sshd.service
, ¿verdad?Afortunadamente para ti, systemd está diseñado para este tipo de cosas. Simplemente ingrese su definición de servicio
/etc/systemd/system/ssh.service
, ejecútelosystemctl daemon-reload
para recargar los archivos de la unidad, y systemd usará automáticamente esa configuración en lugar del sistemassh.service
.¿Quieres tener
systemctl enable mysshd.service
trabajo también? No hay problema. En la[Install]
sección del archivo de su unidad, agregue una línea que digaAlias=mysshd.service
. Luego ejecutesystemctl reenable ssh.service
para que systemd arregle los enlaces simbólicos de la unidad, y estará dorado.Ahora, no ha dado detalles sobre lo que
mysshd.service
se supone que debe hacer. Si es completamente diferente de lo normalssh.service
, ¡genial! Usa el método anterior. Sin embargo, si solo desea cambiar una pequeña cosa, está utilizando el enfoque incorrecto. systemd le permite crear "fragmentos" de archivos de la unidad que se aplicarán sobre los archivos de la unidad normal. Esto le permite agregar o anular directivas individuales mientras permite que el resto del archivo de la unidad reciba actualizaciones del administrador de paquetes. Para hacer esto, simplemente cree/etc/systemd/system/ssh.d/my-custom-config.conf
(puede cambiarmy-custom-config.conf
para que sea lo que quiera, y también puede tener múltiples archivos de anulación). En ese archivo, coloque las directivas que desee cambiar o agregar a las habitualesssh.service
. Incluso puede agregarAlias=
directivas, ¡esosystemctl start mysshd.service
funciona! Solo recuerda ejecutarsystemctl daemon-reload
después de que haya terminado (y, si se ha utilizadoAlias=
,systemctl reenable ssh.service
).Como un aparte, nunca, nunca cambie los archivos de la unidad systemd
/usr/lib/systemd
. ¡Nunca! El estándar de jerarquía del sistema de archivos requiere que/usr
se trate como de solo lectura. En la práctica, esto significa que el administrador de paquetes maneja/usr
(excepto/usr/local
), y no toca lo que maneja el administrador de paquetes, especialmente porque lo que cambie probablemente se sobrescribirá. En cambio, pon tus cosas en algún lugar como/etc
.fuente
foo.service
, ejecutesudo systemctl edit foo.service
y guardará lo que haya escrito/etc/systemd/system/foo.service.d/override.conf
.Alias=
directiva NO funciona en archivos de anulación. Ver github.com/systemd/systemd/issues/1090systemctl edit
cuando escribí esta respuesta. no dudes en editar mi respuesta para reflejar elAlias=
error (pon "OK with answerer" o algo en el mensaje de edición). buena atrapada.Usar
link
con la ruta completa:Tenga en cuenta que no puede vincular un archivo de servicio que en sí mismo ya sea un enlace.
fuente
Los enlaces simbólicos no solían ser posibles . Pero son a partir de hoy.
fuente