【发布时间】:2019-06-06 22:15:16
【问题描述】:
就像标题一样。我有在树莓派 3 上运行的 Java 网络应用程序。当我从控制台运行应用程序时,如 java -jar myApp.java 或 sudo 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