Tengo varios proyectos diferentes que ya contienen servicios Upstart y estoy implementando el enfoque para vincular simbólicamente esos servicios /etc/init
directamente 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.service
me permitemantener mi definición de servicio en la copia de trabajo SVN. Lo único que me falta actualmente es adoptar adecuadamente mi readlink
enfoque 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 readlink
enfoque 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 readlink
enfoque externamente.
¿Pero hay algo más fácil que me estoy perdiendo? Algo simple como lo siguiente, donde %f
estarí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.