温馨提示×

centos nohup日志怎么配置

小樊
45
2026-07-20 20:46:14
栏目: 智能运维

在 CentOS 中,nohup 本身不能配置日志格式或滚动策略,它只是把进程的标准输出/错误重定向到文件。要实现“日志配置”,通常要把 nohup + 输出重定向 + 日志轮转(logrotate) 一起用。下面按常见需求说明。


一、nohup 日志的基本用法

1️⃣ 默认行为

nohup java -jar app.jar &
  • 默认日志文件:nohup.out
  • 位置:当前目录
  • 包含:stdout + stderr

⚠️ 问题:nohup.out 会无限增长,没有轮转


2️⃣ 指定日志文件(推荐)

nohup java -jar app.jar > app.log 2>&1 &

含义:

  • > app.log:stdout 写到 app.log
  • 2>&1:stderr 也写进去
  • &:后台运行

✅ 这是最常用做法


3️⃣ 不写日志(丢弃)

nohup java -jar app.jar > /dev/null 2>&1 &

二、按时间生成日志(shell 方式)

按日期命名日志

nohup java -jar app.jar > app_$(date +%Y%m%d).log 2>&1 &

⚠️ 只在启动时生成一次文件名,不会自动按天切割


三、日志轮转(重点)✅

使用 logrotate(生产推荐)

1️⃣ 编辑配置

vim /etc/logrotate.d/app

示例配置:

/opt/app/app.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
    dateext
}

2️⃣ 参数说明

参数 说明
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
copytruncate 不重启进程截断日志
dateext 加日期后缀

3️⃣ 测试

logrotate -vf /etc/logrotate.d/app

✅ 这是最标准、最安全的方式


四、程序自身日志(比 nohup 更重要)

如果你的程序是:

  • Java(logback / log4j2)
  • Python(logging)
  • Node(winston / pino)

不要用 nohup 输出当业务日志

示例(logback)

<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>7</maxHistory>
</rollingPolicy>

nohup 只负责:

nohup java -jar app.jar > /dev/null 2>&1 &

五、systemd(CentOS 7+ 推荐 ✅)

1️⃣ 创建服务

vim /etc/systemd/system/app.service
[Unit]
Description=app
After=network.target

[Service]
ExecStart=/usr/bin/java -jar /opt/app/app.jar
Restart=always
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/app.log

[Install]
WantedBy=multi-user.target

2️⃣ 启动

systemctl daemon-reload
systemctl start app
systemctl enable app

✅ 日志可控、可重启、可管理


六、常见问题

❓ nohup.out 太大怎么办?

cat /dev/null > nohup.out

❓ 日志不实时?

加上:

export PYTHONUNBUFFERED=1   # Python

或 Java:

-Dspring.output.ansi.enabled=never

七、总结(推荐方案)

场景 推荐方案
简单脚本 nohup + 重定向
长期运行 nohup + logrotate
生产服务 systemd + 程序日志
Java 应用 logback + logrotate

如果你愿意,可以告诉我:

  • ✅ CentOS 版本
  • ✅ 是什么程序(Java / Python / Shell)
  • ✅ 是否希望按天切割

我可以给你一份可直接用的完整配置

0