在 CentOS(以及大多数 Linux) 中,nohup 默认会把输出写到当前目录下的 nohup.out,但你可以手动重定向日志路径和类型。
下面按常见场景说明。
一、基本用法(重定向 stdout / stderr)
nohup command > app.log 2>&1 &
含义:
-
> app.log:标准输出写到app.log -
2>&1:错误输出也合并到标准输出 -
&:后台运行
✅ 最常用
二、指定不同日志文件
nohup command > stdout.log 2> stderr.log &
-
stdout.log:正常输出 -
stderr.log:错误日志
三、不生成 nohup.out(丢弃输出)
nohup command > /dev/null 2>&1 &
或:
nohup command &> /dev/null &
四、追加日志(不覆盖)
nohup command >> app.log 2>&1 &
适合长期运行服务,防止日志被清空。
五、结合 Java / Python / Shell 示例
Java
nohup java -jar app.jar > app.log 2>&1 &
Python
nohup python3 main.py > run.log 2>&1 &
Shell 脚本
nohup ./start.sh > start.log 2>&1 &
六、查看后台任务
jobs
或:
ps -ef | grep command
七、常见问题
1️⃣ nohup.out 仍然生成?
你 没有重定向输出,或重定向没写全
✅ 必须显式写 > file 2>&1
2️⃣ 日志太大怎么办?
可结合 logrotate,例如:
/opt/app/app.log {
daily
rotate 7
missingok
notifempty
}
如果你愿意,可以告诉我:
- 你运行的是 什么程序(Java / Python / Shell)
- 是否希望 按日期切分日志
- 是否在 systemd 环境
我可以给你一个更规范的方案(比如用 systemd 而不是 nohup)。