在 CentOS(以及其他 Linux 发行版)里,nohup 启动的进程日志本身不会被 nohup 自动删除,如果你发现 nohup 日志(通常是 nohup.out)“不见了 / 被删了”,一般有以下几种常见原因:
很多人以为是 nohup 一定会产生 nohup.out,其实不是。
nohup command > my.log 2>&1 &
此时:
my.lognohup.out 根本不会生成✅ 检查方式:
ls -l nohup.out
ls -l *.log
常见于“为了不写日志”的写法:
nohup command > /dev/null 2>&1 &
这样日志永远不会存在。
如果程序:
而 nohup.out 本身内容为空,有些运维脚本 / 临时目录会清理空文件。
如果你在以下目录启动:
/tmp
/run
/var/tmp
CentOS 会定期清理:
systemd-tmpfilestmpwatchcron✅ 查看:
systemctl status systemd-tmpfiles-clean
cat /usr/lib/tmpfiles.d/tmp.conf
cd /some/dir
nohup app &
如果:
日志还会“存在”,但你看不到了。
如果你用的是:
nohup app >> app.log &
而系统有:
/etc/logrotate.d/app
或 crontab 里有:
find /data -name "*.log" -mtime +7 -delete
日志会被自动删除或轮转。
rm nohup.out
或:
rm -rf ./*
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
如果你愿意,可以告诉我:
我可以帮你精确判断是哪一条原因。