linux jar包 如何停止

使用 kill 命令结合 psgrep 来查找并停止运行中的 jar 包进程,`ps -ef | grep yourapp.

Linux系统中,管理和控制JAR包(Java ARchive)的运行是常见的任务,无论是开发、测试还是生产环境,了解如何正确地启动和停止JAR包都是至关重要的,本文将详细介绍在Linux环境下如何停止正在运行的JAR包,包括使用命令行工具、编写脚本以及利用进程管理工具等多种方法。

理解JAR包的运行方式

在Linux中,JAR包通常通过java -jar命令启动。

java -jar myapp.jar

这个命令会在当前终端会话中启动JAR包,如果需要在后台运行,可以结合nohup&来实现。

nohup java -jar myapp.jar > output.log 2>&1 &

或者

java -jar myapp.jar &

了解JAR包的启动方式有助于我们选择合适的方法来停止它。

使用kill命令停止JAR包

查找JAR包的进程ID(PID)

需要确定正在运行的JAR包的进程ID,可以使用pspgrep命令来查找。

使用ps命令:

ps aux | grep myapp.jar

这将列出所有包含myapp.jar的进程,输出可能如下:

user     12345  0.0  1.2 123456 7890 ?        Sl   10:00   0:05 java -jar myapp.jar
user     12346  0.0  0.1  12345  678 ?        R+   10:05   0:00 grep --color=auto myapp.jar

12345是JAR包的PID。

使用pgrep命令:

pgrep -f myapp.jar

这将直接返回匹配myapp.jar的进程ID,例如12345

使用kill命令终止进程

一旦获得PID,就可以使用kill命令来终止进程。

kill 12345

如果进程没有响应,可以发送更强烈的信号:

kill -9 12345

注意事项:

  • kill发送的是SIGTERM信号,允许进程进行清理操作后退出。
  • kill -9发送的是SIGKILL信号,强制终止进程,可能导致数据丢失或资源未正确释放。

使用pkillkillall命令

如果需要停止多个相似的JAR包,可以使用pkillkillall命令。

使用pkill

pkill -f myapp.jar

这将终止所有包含myapp.jar的进程。

使用killall

killall -9 java

这将终止所有Java进程,但这种方法不够精确,可能会影响其他Java应用。

编写脚本自动管理JAR包

为了简化管理,可以编写脚本来启动和停止JAR包。

启动脚本示例

创建一个名为start.sh的脚本:

#!/bin/bash
nohup java -jar /path/to/myapp.jar > /path/to/output.log 2>&1 &
echo $! > /path/to/myapp.pid

这个脚本将JAR包在后台运行,并将PID保存到文件中。

停止脚本示例

创建一个名为stop.sh的脚本:

#!/bin/bash
PID_FILE=/path/to/myapp.pid
if [ -f $PID_FILE ]; then
    PID=$(cat $PID_FILE)
    kill $PID
    rm $PID_FILE
    echo "JAR包已停止,PID文件已删除。"
else
    echo "PID文件不存在,无法停止JAR包。"
fi

使用方法:

赋予脚本执行权限:

chmod +x start.sh stop.sh

启动JAR包:

./start.sh

停止JAR包:

./stop.sh

使用进程管理工具

在生产环境中,使用专业的进程管理工具如systemdSupervisorPM2可以更好地管理JAR包。

使用systemd管理JAR包

创建systemd服务文件:

编辑/etc/systemd/system/myapp.service

[Unit]
Description=My Java Application
After=network.target
[Service]
User=youruser
ExecStart=/usr/bin/java -jar /path/to/myapp.jar
SuccessExitStatus=143
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target

启动和停止服务:

启动服务:

sudo systemctl start myapp.service

停止服务:

sudo systemctl stop myapp.service

查看服务状态:

sudo systemctl status myapp.service

使用Supervisor管理JAR包

安装Supervisor:

sudo apt-get install supervisor

创建配置文件:

编辑/etc/supervisor/conf.d/myapp.conf

[program:myapp]
command=java -jar /path/to/myapp.jar
user=youruser
autostart=true
autorestart=true
stdout_logfile=/var/log/myapp.out.log
stderr_logfile=/var/log/myapp.err.log

更新Supervisor配置并启动服务:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp

停止服务:

sudo supervisorctl stop myapp

使用Java自身的机制停止JAR包

在某些情况下,可以通过在JAR包内部实现优雅的关闭机制来停止应用,监听特定的信号或端口命令。

使用ShutdownHook

在Java应用中,可以添加ShutdownHook来在应用关闭时执行清理操作。

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    System.out.println("应用正在关闭...");
    // 执行清理操作
}));

监听特定端口命令

可以在应用中嵌入一个HTTP服务器,监听特定端口的关闭命令,发送一个HTTP请求来触发应用关闭。

小编总结与最佳实践

在Linux中停止JAR包的方法多种多样,选择合适的方法取决于具体的应用场景和需求,以下是一些最佳实践:

  1. 优先使用进程管理工具:在生产环境中,使用systemdSupervisor等工具可以更好地管理JAR包的生命周期,确保应用的稳定性和可维护性。
  2. 编写启动和停止脚本:对于简单的应用,编写脚本来管理JAR包的启动和停止可以提高操作的便利性和一致性。
  3. 避免使用kill -9:除非必要,否则应优先使用kill命令发送SIGTERM信号,允许应用进行资源清理和优雅关闭。
  4. 记录和管理PID:在启动JAR包时,记录其PID到文件中,便于后续的管理和停止操作。
  5. 实现应用内的关闭机制:在Java应用中实现优雅的关闭机制,可以提高应用的健壮性和可靠性。

通过以上方法和最佳实践,您可以有效地在Linux系统中管理和控制JAR包的运行,确保应用的稳定运行和高效管理。

FAQs

如何在不重启服务器的情况下更新JAR包?

解答: 可以通过以下步骤在不重启服务器的情况下更新JAR包:

  1. 停止当前运行的JAR包:使用上述方法找到并终止正在运行的JAR包进程。
  2. 替换JAR文件:将新的JAR包上传到服务器,并替换旧的JAR文件。
  3. 启动新的JAR包:使用启动脚本或命令重新启动JAR包。
  4. 验证更新:检查应用是否正常运行,并确认使用的是新版本的JAR包。

如果忘记保存JAR包的PID,该如何停止它?

解答: 如果忘记保存JAR包的PID,可以通过以下方法查找并停止它:

  1. 使用pspgrep查找进程
    • ps aux | grep myapp.jar:列出所有包含myapp.jar的进程。
    • pgrep -f myapp.jar:直接返回匹配myapp.jar的进程ID。
  2. 使用kill命令终止进程
    • kill <PID>:发送SIGTERM信号,尝试优雅关闭。

小伙伴们,上文介绍linux jar包 如何停止的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/10558.html

(0)
酷番叔酷番叔
上一篇 2025年8月13日 22:58
下一篇 2025年8月13日 23:19

相关推荐

  • Linux如何安全踢掉登录用户?

    通过终止用户进程踢出(推荐)方法1:使用 pkill 命令sudo pkill -9 -u <用户名>原理:终止该用户所有进程(包括登录会话),参数说明:-u <用户名>:指定目标用户,-9:发送SIGKILL信号强制终止,示例:踢出用户 johnsudo pkill -9 -u joh……

    2025年6月19日
    22300
  • Linux系统服务异常时如何通过命令正确重启?

    Linux系统服务是后台运行的关键程序,负责提供网络、存储、数据库等核心功能,当服务配置修改、异常卡顿或依赖更新时,重启服务是最常见的恢复手段,不同Linux发行版采用的初始化系统不同,重启服务的方法也存在差异,需根据系统环境选择合适的方式,主流重启服务方法及操作步骤基于systemd的系统(主流发行版推荐)目……

    2025年9月22日
    17500
  • 如何生成随机Linux端口?

    在Linux系统中,端口是网络通信的入口,每个端口对应一个唯一的通信服务,随机端口的生成常用于避免端口冲突、动态服务部署、临时测试等场景,尤其在客户端连接、容器化应用或自动化脚本中需求广泛,本文将详细介绍Linux环境下产生随机端口的多种方法,涵盖编程实现、命令行工具及脚本编写,并分析不同场景下的适用性与注意事……

    2025年8月24日
    18500
  • linux下如何安装pe

    Linux 下安装 PE(预安装环境),通常可先获取对应 PE 的 ISO

    2025年8月17日
    16900
  • Linux中执行.sh文件的具体命令和详细步骤是什么?

    在Linux系统中,.sh文件是Shell脚本文件,它包含了一系列命令的集合,通过Shell解释器逐行执行这些命令,以实现自动化任务或复杂操作,要正确执行.sh文件,需掌握文件权限设置、执行方法及常见问题处理,以下是详细说明,执行.sh文件前的准备工作确认文件内容与权限.sh文件本质上是一个文本文件,可用cat……

    2025年9月25日
    15800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信