Centos Java таможенный сервис - PullRequest
0 голосов
/ 11 июля 2019

У меня есть script.sh, который устанавливает переменную окружения и запускает сервер Java.

#!/bin/bash

export JAVA_HOME="/opt/java"
export ....

nohup $JAVA_HOME/bin/java "$MEMORY_JAVA_OPS" -classpath "$MY_CLASSPATH" $MAIN_CLASS  &

Я бы хотел преобразовать этот скрипт (теперь запускается /etc/rc.d/rc.local) в сервис.

Я перепробовал много примеров, найденных в Интернете и поверх StackOverflow. Я создал файл myservice.service, используя множество шаблонов, найденных в Интернете ... Никто не работает!

один пример:

[Unit]
Description=MyService Java Process Restart Upstart Script
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
User=root
TimeoutStartSec=0
Type=simple
KillMode=process
#export JAVA_HOME=/opt/java/jdk-9
#export PATH=$PATH:$JAVA_HOME/bin
WorkingDirectory=/tmp/myworkdir
ExecStart=/path/to/myscript.sh

[Install]
WantedBy=multi-user.target

В некоторых конфигурациях служба запускается, но команда status говорит, что она не работает (хотя она на самом деле работает). С других это не начинается. Ни с одним это останавливается с командой stop ....

Я пытался Type=Simple, разветвление, onehot ... всегда какая-то проблема.

Я бы просто, что после загрузки или когда пользователь запускает systemctl запускает myservice, сервис запускается, и если через некоторое время сбой будет запущен снова. И если я запускаю systemclt stop myservice, он останавливается и не нужно останавливать процесс.

1 Ответ

0 голосов
/ 11 июля 2019

Во-первых, нужно сказать, что понятие «сервис» сильно отличается в среде Linux / Unix и Windows. Из твоего вопроса мне кажется ты ищешь решение Unix.

В Unix вы обычно регистрируете стату и останавливаете скрипт / команду. Сценарий запуска просто запускает ваше java-приложение через java -jar app.jar. Это приложение выполняет бизнес-логику, а также открывает прослушивание на некотором порте отключения.

Сценарий / команда stop просто вызывает другое (или то же самое с другими параметрами cmd) java-приложение, которое больше ничего не делает, просто отправляя команду STOP на порт SHUTDOWN исходного приложения.

Вы можете посмотреть более подробно, например, на сценарии запуска / остановки tomcat - они делают именно это.

Для Windows лучше использовать некоторые обертки, такие как WinRun4J или что-то еще. Конечно, у вас может быть один мультиплатформенный архетип maven для сервиса «универсальной мультиплатформы», как у нас.

Редакция: Если вы все еще не знаете, как настроить его в Linux, прочитайте https://linuxconfig.org/how-to-create-systemd-service-unit-in-linux

ExecStart будет запуском java -jar app.jar, а ExecStop будет командой остановки java -jar app-stopper.jar

...