Estoy tratando de ejecutar un script de shell desde systemd. El script se ejecuta bien desde la línea de comando.
El script (runServer.sh) ejecuta un proceso Java y tiene este aspecto:
#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"
Dentro /usr/lib/systemd/system
(o /lib/systemd/system/
en otros sistemas operativos) he creado un archivo de servicio (myService.service):
[Unit]
Description=My Servers service
[Service]
ExecStart=/home/pruss/dev/ServerDeploy5-4.1/Server/runServer.sh
User=root
Type=oneshot
[Install]
WantedBy=multi-user.target
El resultado
Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.
Lo intento:
systemctl status myService.service
Loaded: loaded (/usr/lib/systemd/system/myService.service; disabled)
Active: failed (Result: exit-code) since Thu 2015-07-23 12:27:38 BST; 26s ago
Main PID: 28413 (code=exited, status=203/EXEC)
Respuestas:
Es posible que no necesite el script de shell. Puede iniciar el proceso desde el archivo myService.service, siempre que utilice la ruta completa al archivo binario de Java y al archivo jar. Debería verse algo así como
Funciona en CentOS 7.2.
fuente
No estoy seguro de quién le dio un pulgar hacia abajo ...
Encontré la solución y la publiqué para ahorrarle el esfuerzo a otros.
Lo que ves arriba funciona. Sin embargo, el servicio final es así:
Es importante destacar que, dentro de mi script de shell, necesitaba poner en la ruta completa el archivo .jar. java -jar /home/myprog.jar etc.
es decir ./myJar.jar no funcionó. Espero que ayude.
fuente
Eche un vistazo a mi respuesta en stackoverflow que detalla cómo crear un
systemd
servicio para una aplicación Java:/programming//a/22121547/272180
fuente
Esta es mi plantilla systemd para java un proceso
fuente
Tuve el mismo problema (código = salido, estado = 203 / EXEC).
No olvide otorgar permisos de ejecución de script a su usuario.
Es posible que desee cambiar 777 a algo más restrictivo.
o
Luego:
fuente
Es posible que deba agregar WorkingDirectory = para que sepa desde dónde ejecutar las cosas.
fuente