在Linux系统上将Java应用程序设置为服务

138

我编写了一个Java服务器应用程序,运行在标准的虚拟主机Linux解决方案上。该应用程序一直运行以监听套接字连接并为它们创建新处理程序。它是客户端/服务器应用程序的服务器端实现。

我启动它的方式是将其包含在服务器的启动rc.local脚本中。但是,一旦启动,我不知道如何访问它停止它,如果我想安装更新,所以我必须重新启动服务器才能重新启动应用程序。

在Windows PC上,对于这种类型的应用程序,我可能会创建一个Windows服务,然后可以随意停止和启动它。在Linux盒子上是否有类似的东西,以便如果我启动此应用程序,我可以停止它并重新启动它,而无需完全重启服务器。

我的应用程序名为WebServer.exe。 我通过将其包含在rc.local中在服务器启动时启动它,如下所示:

java -jar /var/www/vhosts/myweb.com/phpserv/WebServer.jar &

我对Linux有些陌生,所以希望能够得到任何示例和帖子的帮助。但是我有SSH、完整的FTP访问权限可以安装任何更新,并且可以访问Plesk面板。

16个回答

1
然而,一旦启动,我不知道如何访问它以停止它。
您可以编写一个简单的停止脚本,用于grep您的Java进程,提取PID并调用kill。虽然不太花哨,但很直接。像这样的东西可能会作为一个开始有所帮助:
#!/bin/bash
PID = ps ax | grep "name of your app" | cut -d ' ' -f 1
kill $PID

2
我对Linux不是很熟悉,但pkill nameofprocess不是做同样的事情吗? - Denys Séguret

1

来自 Spring Boot参考指南

Installation as an init.d service (System V)

Simply symlink the jar to init.d to support the standard start, stop, restart and status commands. Assuming that you have a Spring Boot application installed in /var/myapp, to install a Spring Boot application as an init.d service simply create a symlink:

$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp

Once installed, you can start and stop the service in the usual way. For example, on a Debian based system:

$ service myapp start

Tip If your application fails to start, check the log file written to /var/log/<appname>.log for errors.

继续阅读以了解如何保护已部署的服务。

按照所述步骤后,我发现我的服务无法启动,并在日志中看到以下错误信息:start-stop-daemon: 无法识别选项 --no-close。我已成功通过创建配置文件/var/myapp/myapp.conf并添加以下内容来修复它:

USE_START_STOP_DAEMON=false

1

1

1

可以将War文件作为Linux服务运行,您可能需要在打包之前在pom.xml文件中强制添加,因为某些发行版可能无法自动识别。要这样做,请在spring-boot-maven-plugin插件的内部添加以下属性。

                    <embeddedLaunchScriptProperties>
                        <mode>service</mode>
                    </embeddedLaunchScriptProperties>

Next, setup your init.d with:

ln -s myapp.war /etc/init.d/myapp

并且您将能够运行

service myapp start|stop|restart

您可以在Spring Boot文档中找到许多其他选项,包括Windows服务。


1

我有一个使用Netty编写的Java应用程序,想要将其作为systemd服务运行。不幸的是,无论我使用什么类型的服务,应用程序总是会停止。最终,我将Java启动包装在了screen中。以下是配置文件:

service

[Unit]
Description=Netty service
After=network.target
[Service]
User=user
Type=forking
WorkingDirectory=/home/user/app
ExecStart=/home/user/app/start.sh
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

开始

#!/bin/sh
/usr/bin/screen -L -dmS netty_app java -cp app.jar classPath

从那一点开始,您可以使用systemctl [start|stop|status] service命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接