安亿程序开发

centos nohup日志如何配置

2 次浏览
# 智能运维 # centos

在 CentOS 下,nohup 本身没有配置文件,它的日志行为是通过启动命令参数和 Shell 重定向来控制的。下面把常见用法和配置思路系统说明一下。 一、nohup 默认日志行为 nohup command & 默认行为: 标准输出(stdout) → nohup.out 标准错误(stderr) → nohup.out 文件位置:当前目录 若当前目录不可写 → $HOM

CentOS 下,nohup 本身没有配置文件,它的日志行为是通过启动命令参数Shell 重定向来控制的。下面把常见用法和配置思路系统说明一下。


一、nohup 默认日志行为

nohup command &

默认行为:

  • 标准输出(stdout) → nohup.out
  • 标准错误(stderr) → nohup.out
  • 文件位置:当前目录
  • 若当前目录不可写 → $HOME/nohup.out

⚠️ 不推荐长期依赖默认 nohup.out,日志会无限增长。


二、推荐:手动指定日志文件(常用)

1️⃣ 标准用法(stdout + stderr)

nohup command > app.log 2>&1 &

含义:

  • >:重定向 stdout
  • 2>&1:stderr 合并到 stdout
  • &:后台运行

最常用、最推荐


2️⃣ 分别记录 stdout / stderr

nohup command > app.log 2> error.log &

适合排查错误。


3️⃣ 不记录日志(丢弃)

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

适合不需要日志的程序。


三、日志按日期 / 自动轮转(进阶)

方案 1:使用 cronolog(按日期切分)

nohup command | cronolog "app-%Y%m%d.log" &

安装:

yum install -y cronolog

方案 2:使用 logrotate(生产推荐 ✅)

示例:给 nohup 日志做轮转

假设日志路径:

/opt/app/app.log

1️⃣ 创建 logrotate 配置

vim /etc/logrotate.d/app

内容:

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

说明:

参数 含义
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
copytruncate 不重启进程截断日志(适合 nohup)

nohup 场景必用 copytruncate


四、nohup + systemd(更规范)

如果你用的是 CentOS 7+,更推荐用 systemd 而不是 nohup

示例 service

[Unit]
Description=My App

[Service]
ExecStart=/opt/app/start.sh
Restart=always
StandardOutput=append:/var/log/app.log
StandardError=append:/var/log/app_err.log

[Install]
WantedBy=multi-user.target

然后:

systemctl daemon-reload
systemctl start app
systemctl enable app

✅ 自动日志管理、开机自启、崩溃重启


五、查看 nohup 进程和日志

ps -ef | grep command
tail -f app.log

六、总结(推荐方案)

场景 推荐方式
临时运行 nohup command > app.log 2>&1 &
长期运行 nohup + logrotate
生产环境 systemd
日志按天 cronolog / logrotate

如果你愿意,可以把 具体程序(Java / Python / Shell)CentOS 版本 发我,我可以给你一套可直接用的完整配置