15

Я пытаюсь выполнить сценарий оболочки из systemd. Скрипт работает нормально из командной строки.

Сценарий (runServer.sh) запускает процесс Java и выглядит следующим образом:

#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"

Внутри /usr/lib/systemd/system (или /lib/systemd/system/ в других ОС) я создал файл службы (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

Результат

Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.

Я попробую:

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)

5 ответов5

11

Вам может не понадобиться сценарий оболочки. Вы можете запустить процесс из файла myService.service, если вы используете полный путь к двоичному файлу java и файлу jar. Это должно выглядеть примерно так

ExecStart=/usr/bin/java -jar /home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar

Работает на CentOS 7.2.

11

Не уверен, кто дал это большие пальцы вниз ..

Я нашел решение и опубликовал его, чтобы спасти других.

То, что вы видите выше, работает. Тем не менее, последний сервис, таким образом:

[Unit]
Description=MyProgramThing
[Service]
ExecStart=/home/prus/dev/Blah-4.1/Server/runServer.sh
Type=simple
User=prus
[Install]
WantedBy=multi-user.target

Важно отметить, что внутри скрипта мне нужно было указать полный путь к файлу .jar. java -jar /home/myprog.jar и т. д.

то есть ./myJar.jar не работает. Надеюсь, это поможет.

5

Посмотрите на мой ответ на stackoverflow, в котором подробно описано, как создать сервис systemd для приложения Java:

https://stackoverflow.com/a/22121547/272180

0

У меня была такая же проблема (код = выход, статус = 203/EXEC).

Не забудьте дать разрешение на выполнение скрипта вашему пользователю.

Вы можете изменить 777 на что-то более ограничительное.

chmod 777 /home/yourscript.sh

или же

chmod u+x /home/yourscript.sh

Затем:

systemctl daemon-reload 
systemctl start yourScript.service 
systemctl enable yourScript.service
0

Вам может понадобиться добавить WorkingDirectory =, чтобы он знал, откуда запускать вещи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .