Próbuję wykonać skrypt powłoki z systemd. Skrypt działa poprawnie z wiersza poleceń.
Skrypt (runServer.sh) uruchamia proces Java i wygląda następująco:
#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"
Wewnątrz /usr/lib/systemd/system
(lub /lib/systemd/system/
w innych systemach operacyjnych) utworzyłem plik usługi (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
Wynik
Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.
Próbuję:
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)
Odpowiedzi:
Możesz nie potrzebować skryptu powłoki. Możesz rozpocząć proces z pliku myService.service pod warunkiem, że użyjesz pełnej ścieżki do pliku binarnego java i pliku jar. Powinno to wyglądać mniej więcej tak
Działa na CentOS 7.2.
źródło
Nie jestem pewien, kto dał temu kciuk w dół ...
Znalazłem rozwiązanie i opublikowałem je, aby zaoszczędzić innym wysiłku.
To, co widzisz powyżej, działa. Jednak ostateczna usługa to:
Co ważne, w skrypcie powłoki musiałem podać pełną ścieżkę do pliku .jar. java -jar /home/myprog.jar itp
tj. ./myJar.jar nie działał. Mam nadzieję, że to pomaga.
źródło
Spójrz na moją odpowiedź dotyczącą stackoverflow, która szczegółowo opisuje, jak utworzyć
systemd
usługę dla aplikacji Java:/programming//a/22121547/272180
źródło
To jest mój systemowy szablon dla procesu Java
źródło
Miałem ten sam problem (kod = zakończony, status = 203 / EXEC).
Nie zapomnij przyznać użytkownikowi uprawnień do wykonywania skryptów.
Możesz zmienić 777 na coś bardziej restrykcyjnego.
lub
Następnie:
źródło
Konieczne może być dodanie WorkingDirectory =, aby wiedział, od czego należy uruchamiać.
źródło