温馨提示×

nohup日志怎么配置

小樊
42
2026-07-10 01:25:05
栏目: 编程语言

nohup 本身没有配置文件,它的日志行为主要靠启动命令时的重定向来控制。下面把常见用法和进阶配置一次讲清楚。


一、nohup 默认日志行为

nohup java -jar app.jar &

默认行为:

  • 标准输出(stdout)→ nohup.out
  • 标准错误(stderr)→ nohup.out
  • 文件生成在当前目录

⚠️ 问题:

  • nohup.out 会无限增长
  • 不方便按日期管理

二、推荐:手动配置日志输出(最常用)

1️⃣ 指定日志文件(覆盖)

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

含义:

  • >:stdout 重定向
  • 2>&1:stderr 也写入同一文件

2️⃣ 追加日志(推荐)

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

避免每次重启覆盖旧日志。


3️⃣ stdout 和 stderr 分开

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

或追加:

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

三、按日期切分日志(实用)

1️⃣ 使用日期命名(简单)

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

⚠️ 只在启动时生效,不会自动按天滚动。


2️⃣ 使用 cronolog(自动按天切分)

nohup java -jar app.jar | cronolog logs/app_%Y%m%d.log &

安装:

yum install cronolog
# 或
apt install cronolog

✅ 生产环境常用


四、配合 logrotate(生产级)

logrotate 示例

/etc/logrotate.d/app

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

✅ 优点:

  • 自动按天切分
  • 自动压缩
  • 控制保留天数

五、nohup + systemd(强烈推荐)

如果可以,不要用 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

✅ 自动重启
✅ 日志可控
✅ 运维友好


六、常见问题

Q1:nohup.out 删不掉?

rm nohup.out

但进程还在写 → 文件大小变 0,不会释放磁盘

✅ 正确做法:

> nohup.out

Q2:日志太大怎么办?

  • logrotate
  • 或程序内部日志框架(logback / log4j2)

Q3:nohup 能不能配置日志级别?

❌ 不行
✅ 日志级别由应用程序控制


七、推荐组合(总结)

场景 推荐方案
临时跑程序 nohup ... >> app.log 2>&1 &
长期运行 systemd
自动切日志 logrotate
按天切 cronolog

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

  • Java / Python / Shell
  • 服务器还是容器
  • 日志量大概多大?

我可以帮你给出最合适的配置方案

0