当前位置: 首页 > 面试题库 >

在Linux上将Java应用程序作为服务运行

楚羽
2023-03-14
问题内容

我已经编写了一个在标准虚拟主机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

您可以按照一个完整的教程的init.d 这里和systemd(Ubuntu的16+)这里

如果您需要输出日志,请更换 2

nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &

线

nohup java -jar $PATH_TO_JAR >> myService.out 2>&1&


 类似资料:
  • 我编写了一个Java服务器应用程序,它运行在一个标准的虚拟主机Linux解决方案上。应用程序一直运行,监听套接字连接,并为它们创建新的处理程序。它是客户端-服务器应用程序的服务器端实现。 我启动它的方式是将它包含在服务器的start up rc.local脚本中。但是一旦启动我不知道如何访问它,停止它,如果我想安装一个更新,所以我必须重新启动服务器,以便重新启动应用程序。 在windows PC上

  • 问题内容: 我想将Java应用程序作为服务运行。不幸的是,我的局限性在于无法使用Java Service Wrapper之 类的工具(它确实是一种出色的工具)。 有什么方法可以在不依赖外部应用程序的情况下将可执行的JAR作为服务运行吗?我当前已安装该服务,但无法启动。这是我遇到的困扰,除了关于JSW的信息之外,我无法在Google上找到其他任何东西。 问题答案: 有Java Service Wra

  • 问题内容: 每当用户断开手机通话时,我都希望显示自定义弹出消息。问题是如何检测应用程序何时未运行。任何线索都将有所帮助。 问题答案: 已经有一段时间了,并且已经有了很多发展。 首先,如何在Flutter中创建服务以使应用程序始终在后台运行有一些答案? 此外,使用Flutter插件和地理围栏(在2018年9月),Flutter / Background流程 基本上将使您指向在后台执行中等/执行Dar

  • 问题内容: 多年来,由于这篇文章引起了很多关注,因此我在文章的底部列出了每个平台的最佳解决方案。 原始帖子 : 我希望我的node.js服务器在后台运行,即:当我关闭终端时,我希望服务器继续运行。我已经用谷歌搜索并提出了本教程,但是它没有按预期工作。因此,我没有使用该守护程序脚本,而是以为我只使用了输出重定向(该`2>&1 file`部分),但这也不会退出-我在终端中出现空白行,就像它在等待输出/

  • 我想运行perl6/raku Cro应用程序,作为前端Web服务器后面的服务。 只是运行不会处理分段错误后的重新启动 以前在perl5中,我使用过FastCGI-但是的惯用语看起来不兼容FastCGI::Native的示例。 由确实有一个处理程序,但是我不确定这是否足以在服务中指向它,即。 人们目前如何托管Cro应用程序?

  • 我在Azure上的Linux应用服务上部署了一个响应js网站。但它没有部署在应用服务上。我使用pm2命令在linux环境下运行应用程序 pm2 serve/home/site/wwwroot/--无守护进程 但在错误日志中,未找到pm2的错误。接下来呢 容器没有响应端口: 8080上的HTTP ping,站点启动失败。 站点的容器已退出,站点启动失败