¿Cómo evitar una ruta absoluta a un ejecutable en systemd?

¿Cómo evitar una ruta absoluta a un ejecutable en systemd?

Tengo varios proyectos diferentes que ya contienen servicios Upstart y estoy implementando el enfoque para vincular simbólicamente esos servicios /etc/initdirectamente desde una copia de trabajo SVN. Upstart proporciona secuencias de comandos integradas en las que puedo simplemente leer el destino de mi enlace simbólico y ejecutar secuencias de comandos adicionales o el ejecutable del servicio en sí. Lo importante para mi configuración es sólo la siguiente línea:

cd "$(dirname "$(dirname "$(readlink "/etc/init/${UPSTART_JOB}.conf")")")"

De esta manera, no necesito codificar ninguna ruta absoluta a mis copias de trabajo, sino que simplemente confío en el enlace simbólico y en algún diseño de directorio relativo definido de mis diversos proyectos. Me gustaría implementar el mismo enfoque para systemd, pero apegarme tanto como sea posible a los conceptos sugeridos, que parecen no admitir scripts integrados como los usaba anteriormente.

Ya sé que systemctl enable /usr/local/.../someApp.serviceme permitemantener mi definición de servicio en la copia de trabajo SVN. Lo único que me falta actualmente es adoptar adecuadamente mi readlinkenfoque para no necesitar codificar una ruta absoluta. he leído sobreespecificadoresya, pero según tengo entendido, no proporcionan rutas absolutas y no resuelven enlaces simbólicos.

Además de eso, puedo ejecutar shells directamente con una línea de comando adicional y, en teoría, incorporar mi readlinkenfoque allí. Pero eso parece feo.

Otro enfoque que tengo en mente es algún script de despachador para todo el sistema, ya tengo algo para todo el sistema /usr/local/vendor, al que podría reenviar especificadores y que implementa mi readlinkenfoque externamente.

¿Pero hay algo más fácil que me estoy perdiendo? Algo simple como lo siguiente, donde %festaría el destino del enlace simbólico resuelto:

Inicio ejecutivo = %f/../../bin/someApp.pl

Lo que parece más fácil que los siguientes ejemplos:

ExecStart = /bin/sh -c "..."

ExecStart = /usr/local/vendor/systemd/dispatcher "%f"

¡Gracias!

Respuesta1

No, systemd no tiene ninguna función integrada para esto.

Al igual que con Upstart, tendrás que llamar a un shell.

información relacionada