【问题标题】:Java network application run as service losing network connectionJava 网络应用程序作为服务运行,失去网络连接
【发布时间】:2019-06-06 22:15:16
【问题描述】:

就像标题一样。我有在树莓派 3 上运行的 Java 网络应用程序。当我从控制台运行应用程序时,如 java -jar myApp.javasudo nohup java -jar myApp.java 和然后我把它留了好几个小时。

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

我已经厌倦了许多 systemd 脚本的组合,但没有什么能解决我的问题。我还尝试在 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

【问题讨论】:

    标签: java service websocket raspberry-pi3


    【解决方案1】:

    我找到了解决方案。我不知道究竟是什么原因,但是当我在运行此应用程序之前让睡眠时,它可以正常工作。当我在此之后开始应用程序时,它失去了连接,它工作正常。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多