温馨提示×

centos nohup日志为何被删

小樊
47
2026-09-18 08:10:31
栏目: 智能运维

在 CentOS(以及其他 Linux 发行版)里,nohup 启动的进程日志本身不会被 nohup 自动删除,如果你发现 nohup 日志(通常是 nohup.out)“不见了 / 被删了”,一般有以下几种常见原因:


一、最常见原因

1️⃣ 日志根本没写到 nohup.out

很多人以为是 nohup 一定会产生 nohup.out,其实不是。

nohup command > my.log 2>&1 &

此时:

  • 日志写在 my.log
  • nohup.out 根本不会生成

✅ 检查方式:

ls -l nohup.out
ls -l *.log

2️⃣ 日志被重定向到 /dev/null

常见于“为了不写日志”的写法:

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

这样日志永远不会存在


3️⃣ 进程退出后 nohup.out 被清理

如果程序:

  • 正常退出
  • 或异常崩溃
  • 或服务器重启

nohup.out 本身内容为空,有些运维脚本 / 临时目录会清理空文件。


二、系统或运维因素

4️⃣ /tmp 或当前目录被清理(非常常见)

如果你在以下目录启动:

/tmp
/run
/var/tmp

CentOS 会定期清理:

  • systemd-tmpfiles
  • tmpwatch
  • cron

✅ 查看:

systemctl status systemd-tmpfiles-clean
cat /usr/lib/tmpfiles.d/tmp.conf

5️⃣ 当前目录被删除或切换

cd /some/dir
nohup app &

如果:

  • 目录被 rm
  • 或你换了目录

日志还会“存在”,但你看不到了。


6️⃣ logrotate 或自定义脚本删了日志

如果你用的是:

nohup app >> app.log &

而系统有:

/etc/logrotate.d/app

或 crontab 里有:

find /data -name "*.log" -mtime +7 -delete

日志会被自动删除或轮转


三、用户误操作

7️⃣ 被自己或别人 rm 了

rm nohup.out

或:

rm -rf ./*

8️⃣ 磁盘满 / inode 满导致写入失败

df -h
df -i

日志可能“看似消失”,其实是写不进去。


四、推荐的正确做法(避免日志丢失)

显式指定日志路径

nohup /opt/app/bin/app >> /var/log/app/app.log 2>&1 &

目录不要放 /tmp

mkdir -p /var/log/app

加 logrotate

/var/log/app/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

用 systemd(CentOS 7+ 推荐)

[Service]
ExecStart=/opt/app/bin/app
StandardOutput=append:/var/log/app/app.log

五、排查建议(你可以马上做的)

# 看进程是否还在
ps -ef | grep app

# 看文件描述符指向哪
ls -l /proc/<pid>/fd

# 看是否被删但仍在写
lsof | grep deleted

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

  • CentOS 版本
  • 启动命令
  • 日志路径
  • 是否重启过

我可以帮你精确判断是哪一条原因

0