在 CentOS(以及其他 Linux 发行版)上,nohup 日志过大,通常不是 nohup 本身的问题,而是由使用方式和程序行为共同导致的。下面分点说明常见原因和解决办法。
常见写法:
nohup java -jar app.jar > nohup.out &
问题:
nohup.outnohup.out 不会被自动切割/var/log 下系统日志有 logrotate如果只重定向 stdout:
nohup command > nohup.out &
错误日志仍可能写到终端或文件中,造成混乱和重复。
例如:
这会导致几分钟内几个 GB 日志
nohup java -jar app.jar > app.log 2>&1 &
不要依赖 nohup.out 作为日志:
示例(Logback):
<root level="INFO">
<appender-ref ref="ROLLING"/>
</root>
示例 /etc/logrotate.d/app:
/opt/app/app.log {
size 100M
rotate 5
compress
missingok
notifempty
copytruncate
}
copytruncate对 nohup 程序很关键,避免重启进程
不要长期开 DEBUG:
nohup java -jar app.jar --logging.level.root=INFO > app.log 2>&1 &
nohup command > /dev/null 2>&1 &
CentOS 7+ 推荐:
[Service]
StandardOutput=journal
StandardError=journal
然后用:
journalctl -u app.service
nohup 日志过大,不是 nohup 的锅,而是“所有输出无限制地写进一个文件”。
如果你愿意,可以贴出:
我可以帮你给出最合适的日志方案。