温馨提示×

nohup日志如何设置

小樊
35
2026-08-31 08:16:40
栏目: 编程语言

在 Linux 中,nohup 默认会把标准输出和标准错误都追加到当前目录下的 nohup.out 文件中。你可以通过重定向来自定义日志的输出位置、格式和大小控制。

下面按常见场景详细说明。


一、最基本的 nohup 日志用法

nohup command > nohup.log 2>&1 &

含义:

  • > nohup.log:标准输出重定向到 nohup.log
  • 2>&1:标准错误也重定向到标准输出
  • &:后台运行

推荐写法


二、区分 stdout 和 stderr(不推荐,但可选)

nohup command > stdout.log 2> stderr.log &
  • stdout.log:正常输出
  • stderr.log:错误日志

⚠️ 实际生产中更推荐合并到一个日志文件,方便排查。


三、指定日志目录(常用)

nohup command > /data/logs/app.log 2>&1 &

或先创建目录:

mkdir -p /data/logs
nohup command > /data/logs/app.log 2>&1 &

四、关闭 nohup 日志(不记录)

nohup command > /dev/null 2>&1 &

适用于:

  • 不关心输出
  • 程序本身已有日志系统(如 logback / log4j)

五、防止 nohup.out 无限增长(非常常见)

1️⃣ 使用日志切割(推荐)

方式一:logrotate(生产环境首选)

示例 /etc/logrotate.d/myapp

/data/logs/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

2️⃣ 使用 cronolog(不推荐新项目)


六、每天生成一个新的日志文件(进阶)

nohup command >> /data/logs/app_$(date +%Y%m%d).log 2>&1 &

⚠️ 注意:

  • 日期只在启动时计算一次
  • 不会自动按天滚动

七、nohup + Java / Python / Shell 示例

Java

nohup java -jar app.jar > /data/logs/app.log 2>&1 &

Python

nohup python3 main.py > /data/logs/main.log 2>&1 &

Shell 脚本

nohup ./start.sh > /data/logs/start.log 2>&1 &

八、查看 nohup 日志

tail -f app.log
less app.log

九、常见问题

❓ 为什么 nohup.out 还在生成?

  • 你没有重定向输出
  • 程序内部又打开了 nohup.out

✅ 解决:

nohup command > app.log 2>&1 &

❓ nohup 会自动覆盖日志吗?

  • >:覆盖
  • >>:追加(推荐)

十、推荐标准模板 ✅

nohup command >> /data/logs/app.log 2>&1 &

如果还有具体场景(如 Java 服务、Docker、K8s、日志太大),可以直接告诉我,我可以给你更精确的方案。

0