在Linux上运行Java应用程序作为服务
我编写了一个运行在标准虚拟托管Linux解决方案上的Java服务器应用程序。 应用程序一直运行侦听套接字连接并为它们创建新的处理程序。 它是客户端 - 服务器应用程序的服务器端实现。
我启动它的方式是将它包含在启动服务器的rc.local脚本中。 但是一旦启动,我不知道如何访问它来停止它,如果我想安装更新,那么我必须重新启动服务器才能重新启动应用程序。
在Windows PC上,对于这种类型的应用程序,我可能会创建一个Windows服务,然后我可以根据需要停止并启动它。 在Linux上有没有这样的东西,所以如果我启动这个应用程序,我可以停止它并重新启动它,而不必重新启动服务器。
我的应用程序被称为WebServer.exe。 它在服务器启动时启动,将它包含在我的rc.local中,如下所示:
java -jar /var/www/vhosts/myweb.com/phpserv/WebServer.jar &
我在Linux上有点小事,所以任何帖子都会被赞赏。 不过,我确实拥有SSH,并且可以通过完全FTP访问该框来安装任何更新以及访问Plesk面板。
我在这里写了另一个简单的包装:
#!/bin/sh
SERVICE_NAME=MyService
PATH_TO_JAR=/usr/local/MyProject/MyJar.jar
PID_PATH_NAME=/tmp/MyService-pid
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stopping ...";
kill $PID;
echo "$SERVICE_NAME stopped ...";
rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is not running ..."
fi
;;
esac
你可以在这里和systemd(ubuntu 16+)上看到完整的init.d教程
如果您需要输出日志,请替换2
nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
行
nohup java -jar $PATH_TO_JAR >> myService.out 2>&1&
一个简单的解决方案是创建一个通过nohup运行Java的脚本start.sh,然后将PID存储到一个文件中:
nohup java -jar myapplication.jar > log.txt 2> errors.txt < /dev/null &
PID=$!
echo $PID > pid.txt
然后你的停止脚本stop.sh会从文件中读取PID并杀死应用程序:
PID=$(cat pid.txt)
kill $PID
当然,我省略了一些细节,例如检查过程是否存在,如果完成,则删除pid.txt
。
Linux服务初始化脚本存储在/etc/init.d
。 您可以复制和定制/etc/init.d/skeleton
文件,然后调用
service [yourservice] start|stop|restart
见http://www.ralfebert.de/blog/java/debian_daemon/。 它的Debian(所以,Ubuntu也是如此),但适合更多的发行版。
链接地址: http://www.djcxy.com/p/90041.html上一篇: Run a Java Application as a Service on Linux
下一篇: What is the correct way to start a mongod service on linux / OS X?