温馨提示×

centos nohup日志如何设置

小樊
55
2026-07-20 20:50:13
栏目: 智能运维

CentOS 下,使用 nohup 运行程序时,日志设置主要通过 重定向 来完成。nohup 本身并不提供复杂的日志配置选项,而是依靠 Shell 重定向 来控制日志输出位置。

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


一、nohup 默认日志行为

nohup command &

默认行为:

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

二、常用日志设置方式(推荐)

1️⃣ 指定日志文件(最常用)

nohup command > app.log 2>&1 &

解释:

  • >:重定向标准输出
  • 2>&1:将标准错误合并到标准输出
  • app.log:自定义日志文件

生产环境最推荐


2️⃣ 标准输出和错误分开记录

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

适合需要分别排查错误的情况。


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

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

nohup command &> /dev/null &

✅ 适用于不需要日志的脚本或服务


4️⃣ 追加日志而不是覆盖

nohup command >> app.log 2>&1 &
  • >>:追加写入
  • 避免每次重启覆盖旧日志

三、结合 nohup + Java / Python / Shell 示例

Java 示例

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

Python 示例

nohup python3 main.py > run.log 2>&1 &

Shell 脚本示例

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

四、后台运行并查看日志

查看进程

ps -ef | grep command

jobs

实时查看日志

tail -f app.log

五、日志过大问题(重要)

nohup.outapp.log 不会自动轮转,可能写满磁盘。

解决方案

方案 1:使用 logrotate(推荐)

vim /etc/logrotate.d/app

示例:

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

方案 2:定时清空

echo > app.log

方案 3:直接丢弃日志

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

六、与 systemd 的对比(进阶建议)

如果是 长期运行的服务,更推荐使用 systemd

systemctl start yourapp
journalctl -u yourapp -f

systemd 自带日志管理,比 nohup 更稳定。


七、总结速查表

需求 命令
默认日志 nohup cmd &
指定日志 nohup cmd > app.log 2>&1 &
追加日志 nohup cmd >> app.log 2>&1 &
不记录日志 nohup cmd > /dev/null 2>&1 &
查看日志 tail -f app.log

如果你愿意,我可以 根据你的具体程序(Java / Python / Shell)或 CentOS 版本,给你一套更合适的启动 + 日志方案。

0