Creé este archivo de unidad en /lib/systemd/system/menu-core-prices-update.service
:
[Unit]
Description = core-price-update daemon
After network.target = auditd.service
[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop = /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh
[Install]
WantedBy = multi-user.target
Desde la línea de comando puedo ejecutar:
$ /usr/local/bin/start-menu-core-prices-update.sh
y el programa se inicia correctamente. Pero si inicio el daemon:
$ sudo systemctl start menu-core-prices-update.service
Me sale este error:
Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
--
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed
Los permisos:
-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh
Respuesta aceptada:
Problema #1
Encontré este hilo titulado:[Resuelto] Agregar script personalizado a systemd que tiene el mismo error que el resultado que se muestra arriba, principalmente este bit:
Error en el paso EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh:Error de formato Exec
Este error generalmente significa que su secuencia de comandos tiene uno o más de estos problemas:
- No es ejecutable
- Falta el shebang (
#!/bin/bash
)
Para abordar estos, asegúrese de que su secuencia de comandos sea ejecutable:
$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh
Y asegúrese de agregar un shebang, #!/bin/bash
hacia arriba.
Problema #2
Parece que tienes un error tipográfico en esta línea:
After network.target = auditd.service
Esto probablemente debería ser esto:
After=network.target auditd.service
Problema #3
No me queda claro por qué estás usando Type = forking
. Cuando usa este tipo, es ExecStart=
se requiere usar un método que llame a fork()
. También se supone que debes usar el PIDFile=
opción.
Espero que su aplicación Java funcione bien con simple
o oneshot
. Consulte estas preguntas y respuestas de U&L tituladas:Bifurcación en un script de systemd para obtener más información sobre esto.