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

nohup.outnohup 命令的默认输出日志文件,直接删除会导致正在写入的进程报错,推荐以下 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.outcat /dev/null > nohup.out(安全清空,保留文件);
  2. 生产环境优先:清空前先备份,避免丢失关键日志;
  3. 避坑要点
    • 不要直接删除运行中进程的 nohup.out
    • 清空后进程仍能正常写入,无需重启;
  4. 长期方案 :用 logrotate 配置日志自动轮转,替代手动清空。

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

相关推荐
数智工坊6 小时前
周志华《Machine Learning》学习笔记--第十二章--计算学习理论
笔记·学习·机器学习
我叫唧唧波13 小时前
Python+AI 全栈学习笔记
人工智能·python·学习
bush413 小时前
嵌入式linux学习记录七,中断
linux·嵌入式
RisunJan13 小时前
Linux命令-nologin(用于系统账户或需要禁止交互式登录的场景)
linux·运维
是阿建吖!13 小时前
【Linux】信号
android·linux·c语言·c++
城北徐宫13 小时前
Linux信号深度解剖:5种产生、3张表、4次切换
linux·c++·学习
倔强的石头10613 小时前
【Linux指南】Linux快捷键与系统实用技巧
linux·运维·服务器
番茄地瓜13 小时前
Linux 配置静态 IP 步骤
linux·运维·服务器
liulilittle13 小时前
论 Linux 内核态全局稳态带宽的卡尔曼估计与工程实现
linux·服务器·网络·c++·计算机网络·tcp·通信
Irissgwe14 小时前
五、应用层协议HTTP
linux·网络·网络协议·http·状态码·url