Linux学习三之 清空 nohup.out 文件

nohup.out 是 nohup 命令的默认输出日志文件,直接删除会导致正在写入的进程报错,推荐以下 4 种安全清空方式(按优先级排序),无需停止运行中的程序。

一、最推荐:快速清空(保留文件,不中断进程)

这是生产环境最常用的方式,直接清空文件内容但保留文件本身(进程写入不会中断):

bash 复制代码
# 核心命令(覆盖为空文件)
> nohup.out

# 等价写法(效果相同,任选其一)
echo "" > nohup.out
# 或
cat /dev/null > nohup.out

✅ 优点:

  • 瞬间完成,不影响正在写入日志的进程;
  • 保留文件权限和所属用户,避免进程因文件不存在报错;❌ 注意:执行时需确保当前目录是 nohup.out 所在目录,或指定完整路径(如 > /opt/app/nohup.out)。

二、分场景清空方案

场景 1:nohup.out 过大(按大小切割 / 轮转)

若文件已达数 GB,清空后很快又会变大,建议先切割日志再清空(避免一次性丢失所有日志):

bash 复制代码
# 1. 先备份当前日志(保留最近记录)
cp nohup.out nohup.out.bak.$(date +%Y%m%d%H%M)

# 2. 清空原文件
> nohup.out

# 3. 可选:压缩备份文件节省空间
gzip nohup.out.bak.202603111600

场景 2:进程正在写入,需实时清空

若担心 > nohup.out 瞬间清空时丢失少量日志,可使用 truncate 命令(更温和):

bash 复制代码
# 截断文件为 0 字节(保留文件属性)
truncate -s 0 nohup.out

场景 3:想保留最后 N 行,清空其余内容

若需保留最近的日志记录,仅清空历史内容:

bash 复制代码
# 保留最后 1000 行,其余清空
tail -n 1000 nohup.out > nohup.out.tmp && mv nohup.out.tmp nohup.out

场景 4:彻底删除并重建(需重启进程)

仅适用于可重启的进程(不推荐生产环境):

复制代码
# 1. 停止写入该文件的进程(假设进程名是 app.jar)
ps -ef | grep app.jar | grep -v grep | awk '{print $2}' | xargs kill -9

# 2. 删除文件
rm -f nohup.out

# 3. 重建空文件(恢复权限)
touch nohup.out
chmod 644 nohup.out # 保持原权限

# 4. 重启进程
nohup java -jar app.jar &

❌ 注意:未停止进程直接删除文件,进程仍会往「已删除的文件句柄」写入,新日志不会出现在新建的 nohup.out 中,直到进程重启。

三、关键注意事项

  1. 避免直接删除文件 :进程运行时删除 nohup.out,操作系统会保留文件句柄,进程继续写入「不可见的临时文件」,导致磁盘空间仍被占用,且新日志无法查看。

  2. 权限问题 :执行清空命令的用户需有文件写入权限(如 chmod 664 nohup.out),否则会报 Permission denied。

  3. 日志轮转(长期方案) :生产环境建议用 logrotate 配置日志自动轮转,避免 nohup.out 无限增大:

    bash 复制代码
    # 编辑 logrotate 配置
    vi /etc/logrotate.d/app-nohup
    # 添加配置
    /opt/app/nohup.out {
        daily          # 每天轮转
        rotate 7       # 保留7天日志
        compress       # 压缩旧日志
        missingok      # 文件不存在时不报错
        notifempty     # 空文件不轮转
        create 644 root root # 重建文件的权限
    }

四、验证清空结果

bash 复制代码
# 查看文件大小(应为 0)
ls -lh nohup.out
# 输出示例:-rw-r--r-- 1 root root 0 Mar 11 16:00 nohup.out

# 查看文件内容(应为空)
cat nohup.out

总结

关键点回顾

  1. 核心命令 :> nohup.out 或 cat /dev/null > nohup.out(安全清空,保留文件);
  2. 生产环境优先:清空前先备份,避免丢失关键日志;
  3. 避坑要点 :
    • 不要直接删除运行中进程的 nohup.out;
    • 清空后进程仍能正常写入,无需重启;
  4. 长期方案 :用 logrotate 配置日志自动轮转,替代手动清空。

按上述方法操作,可安全清空 nohup.out 且不影响正在运行的进程,是生产环境的最优实践。

相关推荐
Ivanqhz9 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
青柠之夏cc10 小时前
AI与教育:个性化学习助手让“因材施教“成为现实,但代价是隐私?
人工智能·学习
for_ever_love__10 小时前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归
在猴站学算法10 小时前
(SQL注入学习)无回显的报错注入(Error-Based)
学习·网络安全·sql注入·ctf竞赛
Frag0ut11 小时前
Chrome四大版本获取及共存指南:Stable/Beta/Dev/Canary
前端·chrome·浏览器·dev·beta·canary·共存版
殷色玫瑰11 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·linux·c语言·c++
知识分享小能手12 小时前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习
꯭自꯭闭꯭13 小时前
DM7主备升级方案
linux·服务器·数据库
用户41071920132513 小时前
VMware 虚拟机Ubuntu 环境linux远程连接失败
linux
lisanmengmeng13 小时前
Nagios邮件报警的配置
linux·运维·服务器