Java网络应用程序作为服务运行而失去了网络连接

时间:2019-06-06 22:15:16

标签: java service websocket raspberry-pi3

标题一样。我有在raspberry pi 3上运行的Java网络应用程序。当我从 java -jar myApp.java sudo nohup java -jar myApp.java 等控制台运行应用程序时,然后我把它放好好几个小时。

然后我尝试将该应用程序作为服务运行。配置完wlan auto之后,运行systmd脚本和所有东西。应用程序正常启动,但是几秒钟后,它失去了网络连接。我可以补充说,有无线网络连接。我徘徊在手动运行的应用程序和作为服务运行的应用程序之间的区别是什么,我没有发现任何特定的内容。我应该知道些什么吗?到目前为止,我还没有找到解决方案。

我已经厌倦了许多systemd脚本的组合,但是没有什么能解决我的问题。而且我还尝试在树莓派上从另一个应用程序运行该应用程序,但它的工作原理类似于从此服务运行。

现在我可以添加一点,当我从控制台 systemctl停止myService 命中,然后 systemctl启动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 :(得分:0)

我找到了解决方案。我不知道到底是什么原因,但是当我在运行该应用程序之前先入睡时,它可以正常运行。这段时间之后,当我启动应用程序后,它失去了连接,它可以正常工作。