如何让Jar包在后台运行?

发布时间:2023-05-23

一、前言

Jar包作为Java语言的一种标准分发格式,已经成为了Java应用程序的主流分发形式。Java程序运行时需要依赖Java虚拟机JVM,而使用Jar包可以将Java类、资源和依赖库打包到一个文件中,并直接在JVM中运行。 在实际应用场景中,我们常常需要使用Java程序作为后台服务运行,而不是依赖用户的交互操作启动。本文将介绍如何让Jar包在后台运行,以便满足这种应用场景的需求。

二、使用命令行启动Jar包

Java虚拟机JVM提供了命令行启动Jar包的方式。我们可以通过JAVA_HOME环境变量找到JVM的根目录,进入bin目录下,使用Java命令启动指定的Jar包。

$ cd $JAVA_HOME/bin
$ java -jar path/to/your/jar/file.jar

其中 path/to/your/jar/file.jar 需要替换成实际的Jar包文件路径。 在Linux系统中,我们可以使用 nohup 命令将进程转入后台运行,以避免进程被关闭。

$ nohup java -jar path/to/your/jar/file.jar > log.file 2>&1 &

这里将Java命令放在 nohup 命令后,使用 > 符号将输出流导入 log.file 中,使用 2>&1 将错误流导入标准输出流。最后加上 & 符号将进程转入后台运行。 这种方式虽然简单易行,但是缺乏进程管理和自动重启机制,应用在生产环境下还需要一些增强措施。

三、使用Systemd配置Jar包后台服务

Systemd是Linux系统下的服务管理器,可以方便地管理系统服务并自动重启崩溃的服务。我们可以使用Systemd来配置Jar包后台服务。 首先,创建一个 .service 文件,使用 systemctl enable 命令将文件注册到Systemd。

$ sudo vi /etc/systemd/system/myproject.service

myproject.service 文件中编写如下内容:

[Unit]
Description=My project Jar service
After=syslog.target
[Service]
User=yourusername
ExecStart=/usr/bin/java -jar /path/to/your/jar/file.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

其中 yourusername 需要替换成实际的用户名,/path/to/your/jar/file.jar 需要替换成实际的Jar包文件路径。 在 Service 节中设置 ExecStart 属性值为Java命令加上Jar包路径,SuccessExitStatus 属性设为143,表示服务关闭时返回状态码为143。这是因为Java程序停止时要发送 SIGTERM 信号,而143是 SIGTERM 信号的标准值。 配置完成后,执行 systemctl daemon-reload 重新载入配置文件,再使用 systemctl start myproject 命令启动服务即可。

四、使用Supervisor管理Jar包进程

Supervisor是一个Python编写的进程管理程序,可以自动启动、重启和停止进程。我们可以使用Supervisor来管理Java程序作为后台服务运行。 首先需要安装和启动Supervisor。

$ sudo apt install supervisor
$ sudo service supervisor start

然后,创建一个 .conf 配置文件在 /etc/supervisor/conf.d/ 目录下,使用 supervisorctl rereadsupervisorctl update 命令重新加载配置文件,并使用 supervisorctl start myproject 命令启动进程。

$ sudo vi /etc/supervisor/conf.d/myproject.conf

myproject.conf 文件中编写如下内容:

[program:myproject]
command=/usr/bin/java -jar /path/to/your/jar/file.jar
user=yourusername
directory=/path/to/your/project/directory
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/myproject.log
stderr_logfile=/var/log/myproject.err

其中 yourusername 需要替换成实际的用户名,/path/to/your/jar/file.jar 需要替换成实际的Jar包文件路径,/path/to/your/project/directory 需要替换成实际的项目路径。 在 program 节中设置 command 属性为Java命令加上Jar包路径,设置 user 属性为实际的用户名,设置 directory 属性为实际的项目路径,设置 autorestart 属性为 true 即可自动重启进程。 stderr_logfilestdout_logfile 分别用于保存错误和输出流。

五、总结

本文介绍了四种方法来让Jar包在后台运行:使用命令行启动Jar包、使用Systemd配置Jar包后台服务、使用Supervisor管理Jar包进程。每种方法都有其适用的场景和优劣势,需要根据具体需求来选择合适的方案。