Сетевое приложение Java запускается как служба, теряющая сетевое соединение - PullRequest
0 голосов
/ 07 июня 2019

Ну как в заголовке.У меня есть сетевое приложение Java, которое работает на Raspberry Pi 3. Когда я запускаю приложение из консоли, как java -jar myApp.java или sudo nohup java -jar myApp.java , а затем яоставьте это, он отлично работает в течение многих часов.

Затем я попытался запустить это приложение в качестве службы.После настройки wlan auto запустите скрипт systmd и все прочее.Приложение запускается правильно, но через несколько секунд теряет подключение к сети.Я могу добавить, что есть Wi-Fi соединение.Я бродил, в чем разница между запуском приложения вручную и в качестве службы, и я не нашел ничего конкретного.Есть что-то, о чем я должен знать?Насколько я не нашел решения.

Я устал от множества комбинаций системных скриптов, но моя проблема не решается ничем.И я также пытался запустить это приложение из другого на RasPberry, но оно работает так же, как и из этого сервиса.

Теперь я могу добавить это, когда я нажимаю с консоли systemctl stop myService , а затем systemctl start myService также работает нормально.

systemd script below:

[Unit]
Description = Java Service
After network.target = MyService.service

[Service]
Type = forking
ExecStart = /usr/local/bin/MyService.sh start
ExecStop = /usr/local/bin/MyService.sh stop
ExecReload = /usr/local/bin/MyService.sh reload

[Install]
WantedBy=multi-user.target

Bash script to run the service:

 #!/bin/bash

SERVICE_NAME=app

PATH_TO_JAR=/home/user/app.jar

RE='^[0-9]+$'

APP_PID=\`ps -ef | grep -v grep | grep "app.jar" | awk '{print $2}'\`

case $1 in

    start)
        echo "Starting $SERVICE_NAME ..."
        if ! [[ $APP_PID =~ $RE ]]; then
            nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null & 
            APP_PID=`ps -ef | grep -v grep | grep "app.jar" | awk '{print $2}'`

            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;

    stop)
        if [[ $APP_PID =~ $RE ]]; then
            echo "$SERVICE_NAME stoping ..." &
            kill $APP_PID &
            APP_PID="" &
            echo "$SERVICE_NAME stopped ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;

    restart)
        if [[ $APP_PID =~ $RE ]]; then
            echo "$SERVICE_NAME stopping ...";
            kill $APP_PID;
            echo "$SERVICE_NAME stopped ...";
            echo "$SERVICE_NAME starting ..."
            nohup java -jar $PATH_TO_JAR /tmp 2>> >> /dev/null & 
            echo "$SERVICE_NAME started ..."
        else
            echo "$SE`enter code here`RVICE_NAME is not running ..."
        fi
    ;;
esac

1 Ответ

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

Я нашел решение.Я не знаю точно, в чем причина, но когда я засыпаю перед запуском этого приложения, оно работает правильно.Когда после этого времени я запускаю приложение, после которого оно теряет соединение, оно работает нормально.

...