在Linux操作系统中,运行Java程序通常涉及直接调用java
命令并执行一个JAR文件,为了确保这些Java应用程序能够在后台运行,并且不会因为关闭终端会话而中断,我们需要采用一些特定的技巧和工具,本文将详细介绍如何在Linux系统中后台运行JAR文件,以及如何管理和监控这些后台进程。
使用 `&` 符号后台运行JAR
最简单的方式是将JAR文件放在后台运行,方法是在命令末尾添加一个&
符号。
nohup java -jar myapp.jar &
nohup
: 这个命令用于忽略挂起信号 (SIGHUP),即使终端会话关闭,进程也会继续运行。
&
: 将进程放到后台运行。
使用 `screen` 或 `tmux`
对于更复杂的场景,可以使用screen
或tmux
这样的终端复用器来管理后台任务。
使用screen
1、安装screen
(如果尚未安装):
sudo apt-get install screen # Debian/Ubuntu系统 sudo yum install screen # CentOS/RHEL系统
2、启动一个新的screen会话:
screen -S myapp
3、在screen会话中运行JAR文件:
java -jar myapp.jar
4、按下Ctrl+A
然后D
键组合,可以分离当前会话,使其在后台运行。
5、重新连接到该会话:
screen -r myapp
使用tmux
1、安装tmux
(如果尚未安装):
sudo apt-get install tmux # Debian/Ubuntu系统 sudo yum install tmux # CentOS/RHEL系统
2、启动一个新的tmux会话:
tmux new -s myapp
3、在tmux会话中运行JAR文件:
java -jar myapp.jar
4、按下Ctrl+B
然后D
键组合,可以分离当前会话,使其在后台运行。
5、重新连接到该会话:
tmux attach -t myapp
使用 `systemd` 服务
对于需要长期运行的后台服务,推荐使用systemd
,这是现代Linux发行版中的系统和服务管理器。
1、创建一个新的服务单元文件,将其命名为/etc/systemd/system/myapp.service
:
[Unit] Description=My Java Application After=network.target [Service] User=yourusername ExecStart=/usr/bin/java -jar /path/to/myapp.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target
2、重新加载systemd
配置:
sudo systemctl daemon-reload
3、启动并使服务开机自启:
sudo systemctl start myapp.service sudo systemctl enable myapp.service
4、检查服务状态:
sudo systemctl status myapp.service
日志记录与监控
无论使用哪种方法,记录日志是非常重要的,可以通过重定向输出到文件或者使用systemd
的日志功能来实现。
nohup java -jar myapp.jar > myapp.log 2>&1 &
或者在systemd
服务文件中配置日志路径:
[Service] StandardOutput=file:/var/log/myapp.log StandardError=inherit
相关FAQs
Q1: 如何停止后台运行的JAR进程?
A1: 可以使用ps
和grep
找到进程ID,然后使用kill
命令终止进程。
ps aux | grep myapp.jar 找到进程ID后,假设是12345 kill 12345
或者使用systemctl
停止systemd
服务:
sudo systemctl stop myapp.service
Q2: 如果JAR文件更新了,如何确保新的版本被使用?
A2: 如果你使用的是systemd
服务,只需重新启动服务即可:
sudo systemctl restart myapp.service
如果是直接在后台运行的进程,先停止旧的进程,再启动新的JAR文件:
kill -9 <old_pid> nohup java -jar /path/to/new_version/myapp.jar &
以上内容就是解答有关“linux 后台运行jar”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1324450.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复