java nohup java

一、核心用法与完整示例

 

1. 基础语法(运行 Java 程序)

 
bash运行
# 最基础格式:后台运行Java程序,输出日志到nohup.out
nohup java -jar your-application.jar > app.log 2>&1 &
 

2. 各参数详解(新手必看)

部分 作用说明
nohup 核心命令,全称 “no hang up”,让程序忽略终端挂断信号(SSH 断开也不停止)
java -jar xxx.jar 运行 Java 可执行 jar 包(最常用场景),若为 class 文件则用 java MainClass
> app.log 将程序标准输出(stdout)重定向到 app.log 文件(替代默认的 nohup.out)
2>&1 将程序错误输出(stderr,如异常堆栈)重定向到和标准输出相同的文件(日志不丢失)
& 将程序放入后台运行,终端可继续执行其他命令
 

3. 进阶实用示例

(1)指定 JVM 参数运行(生产环境必备)
bash
 
运行
# 设置堆内存、编码、日志配置,后台运行并指定日志文件
nohup java -Xms512m -Xmx1024m -Dfile.encoding=UTF-8 -Dlogging.config=./logback.xml -jar your-app.jar > app.log 2>&1 &
  • -Xms512m:JVM 初始堆内存 512MB
  • -Xmx1024m:JVM 最大堆内存 1GB
  • -D:设置系统参数(如编码、日志配置文件)
(2)后台运行并记录进程 ID(方便后续停止)
 
bash
 
运行
# 运行程序并将PID写入pid.file,便于管理
nohup java -jar your-app.jar > app.log 2>&1 & echo $! > pid.file
 
 
  • $!:获取刚启动的后台进程 ID
  • 停止程序时可执行:kill $(cat pid.file)
 
(3)不生成日志文件(仅输出到 null,慎用)
bash
 
运行
# 忽略所有输出(适合无需日志的后台程序)
nohup java -jar your-app.jar > /dev/null 2>&1 &
 
 

二、常用运维操作

1. 查看运行状态

bash运行
 
# 查看后台运行的Java进程
ps -ef | grep java
# 或更简洁的方式
jps -l  # 仅显示Java进程ID和主类/jar包名
 
 

2. 停止后台 Java 程序

 
bash运行
# 方式1:通过进程ID停止(推荐)
kill 12345  # 12345为jps查到的进程ID
# 方式2:强制停止(进程无响应时用)
kill -9 12345
# 方式3:通过pid.file停止
kill $(cat pid.file)
 

3. 查看实时日志

bash
 
运行
 
 
 
 
# 实时监控日志输出(类似tail -f)
tail -f app.log
# 查看最后100行日志
tail -n 100 app.log
 

三、常见问题与注意事项

  1. 权限问题:若提示 nohup: failed to run command 'java': No such file or directory,说明 Java 环境未配置,需指定 java 绝对路径(如 /usr/local/jdk/bin/java)或配置 JAVA_HOME
  2. 日志文件过大:生产环境需配合日志切割工具(如 logrotate),避免 app.log 占满磁盘。
  3. 程序启动失败:先去掉 &nohup 直接运行 java -jar xxx.jar,排查启动报错(如端口占用、配置文件错误)。
  4. 后台进程退出:若 SSH 断开后程序停止,需检查是否用 su 切换用户运行,建议用 screensystemd 替代(长期运行更稳定)。

总结

 
  1. nohup java -jar xxx.jar > app.log 2>&1 & 是后台运行 Java 程序的核心命令,关键是重定向日志并放入后台。
  2. 生产环境需添加 JVM 参数、记录进程 ID,方便后续运维。
  3. 排查问题时先脱离 nohup 直接运行,定位启动错误后再后台部署。
posted @ 2026-01-09 10:33  福寿螺888  阅读(6)  评论(0)    收藏  举报