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系统下开发2048游戏的环境配置与实现?

    开发一个Linux环境下的2048游戏,需结合开发语言、GUI库及游戏逻辑实现,以下以Python(Tkinter库)为例,详细说明开发流程,兼顾性能与跨平台兼容性,环境准备首先确保Linux系统已安装Python3(推荐3.8+),Tkinter作为Python标准GUI库通常已预装,若缺失可通过sudo a……

    2025年8月27日
    3500
  • Linux中如何创建隐藏文件?操作步骤与方法详解?

    在Linux操作系统中,隐藏文件是一类特殊文件,默认情况下不会在文件管理器或命令行中直接显示,常用于存储系统配置、临时数据或用户不希望公开的文件,创建和管理隐藏文件是Linux日常操作中的基础技能,本文将详细介绍Linux中创建隐藏文件的多种方法、相关管理操作及注意事项,Linux隐藏文件的基本概念Linux中……

    2025年9月28日
    1500
  • 如何登录到linux主机名

    过SSH命令(如ssh 用户名@主机名)或使用远程登录工具,输入

    2025年8月15日
    3500
  • 如何让Linux系统宕机?有哪些具体的操作步骤和方法?

    Linux作为广泛使用的操作系统,其稳定性备受认可,但在特定情况下仍可能出现宕机(系统完全无法响应或崩溃),了解Linux宕机的触发机制,有助于系统管理员优化系统配置、排查故障,或在进行压力测试时评估系统极限,本文将从内核、硬件、资源、文件系统、驱动及安全等多个维度,详细分析导致Linux宕机的常见原因及技术原……

    2025年9月21日
    1600
  • 如何修改Linux服务器密码?详细操作步骤是怎样的?

    修改Linux服务器密码是系统管理和安全维护的基础操作,根据登录方式(本地/远程)、用户权限(普通用户/root)以及是否忘记密码等不同场景,操作方法有所差异,以下是详细的操作步骤、注意事项及常见问题处理,帮助管理员安全高效地完成密码修改,本地登录修改当前用户密码当已通过控制台或本地终端登录Linux服务器时……

    2025年10月1日
    2800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信