nohup 本身没有配置文件,它的日志行为主要靠启动命令时的重定向来控制。下面把常见用法和进阶配置一次讲清楚。
nohup java -jar app.jar &
默认行为:
nohup.outnohup.out⚠️ 问题:
nohup.out 会无限增长nohup java -jar app.jar > app.log 2>&1 &
含义:
>:stdout 重定向2>&1:stderr 也写入同一文件nohup java -jar app.jar >> app.log 2>&1 &
避免每次重启覆盖旧日志。
nohup java -jar app.jar > app.log 2> error.log &
或追加:
nohup java -jar app.jar >> app.log 2>> error.log &
nohup java -jar app.jar >> app_$(date +%Y%m%d).log 2>&1 &
⚠️ 只在启动时生效,不会自动按天滚动。
cronolog(自动按天切分)nohup java -jar app.jar | cronolog logs/app_%Y%m%d.log &
安装:
yum install cronolog
# 或
apt install cronolog
✅ 生产环境常用
/etc/logrotate.d/app
/opt/app/app.log {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
✅ 优点:
如果可以,不要用 nohup,用 systemd:
[Unit]
Description=My App
[Service]
ExecStart=/usr/bin/java -jar /opt/app/app.jar
Restart=always
StandardOutput=append:/opt/app/app.log
StandardError=append:/opt/app/error.log
[Install]
WantedBy=multi-user.target
systemctl start app
systemctl enable app
✅ 自动重启
✅ 日志可控
✅ 运维友好
rm nohup.out
但进程还在写 → 文件大小变 0,不会释放磁盘
✅ 正确做法:
> nohup.out
logrotate❌ 不行
✅ 日志级别由应用程序控制
| 场景 | 推荐方案 |
|---|---|
| 临时跑程序 | nohup ... >> app.log 2>&1 & |
| 长期运行 | systemd |
| 自动切日志 | logrotate |
| 按天切 | cronolog |
如果你愿意,可以告诉我:
我可以帮你给出最合适的配置方案。