J'essaie d'exécuter un script shell à partir de systemd. Le script s'exécute correctement à partir de la ligne de commande.
Le script (runServer.sh), exécute un processus Java et ressemble à ceci:
#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"
A l'intérieur /usr/lib/systemd/system
(ou /lib/systemd/system/
sur d'autres OS) j'ai créé un fichier de service (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
Le résultat
Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.
J'essaie:
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)
Réponses:
Vous n'avez peut-être pas besoin du script shell. Vous pouvez démarrer le processus à partir du fichier myService.service à condition d'utiliser le chemin d'accès complet au fichier binaire java et au fichier jar. Cela devrait ressembler à quelque chose
Fonctionne sur CentOS 7.2.
la source
Je ne sais pas qui a donné un coup de pouce ..
J'ai trouvé la solution et je l'ai publiée pour économiser les efforts des autres.
Ce que vous voyez ci-dessus fonctionne. Cependant, le service final est donc:
Surtout, à l'intérieur de mon script shell, j'avais besoin de mettre dans le chemin complet le fichier .jar. java -jar /home/myprog.jar etc
c'est-à-dire que ./myJar.jar n'a pas fonctionné. J'espère que cela pourra aider.
la source
Jetez un oeil à ma réponse sur stackoverflow qui détaille comment créer un
systemd
service pour une application Java:/programming//a/22121547/272180
la source
Ceci est mon modèle systemd pour java un processus
la source
J'ai eu le même problème (code = sorti, statut = 203 / EXEC).
N'oubliez pas de donner des autorisations d'exécution de script à votre utilisateur.
Vous voudrez peut-être remplacer 777 par quelque chose de plus restrictif.
ou
Alors:
la source
Vous devrez peut-être ajouter un WorkingDirectory = pour qu'il sache d'où exécuter les choses.
la source