Linux学习三之 清空 nohup.out 文件
nohup.out是nohup命令的默认输出日志文件直接删除会导致正在写入的进程报错推荐以下4 种安全清空方式按优先级排序无需停止运行中的程序。一、最推荐快速清空保留文件不中断进程这是生产环境最常用的方式直接清空文件内容但保留文件本身进程写入不会中断# 核心命令覆盖为空文件 nohup.out # 等价写法效果相同任选其一 echo nohup.out # 或 cat /dev/null nohup.out✅ 优点瞬间完成不影响正在写入日志的进程保留文件权限和所属用户避免进程因文件不存在报错❌ 注意执行时需确保当前目录是nohup.out所在目录或指定完整路径如 /opt/app/nohup.out。二、分场景清空方案场景 1nohup.out 过大按大小切割 / 轮转若文件已达数 GB清空后很快又会变大建议先切割日志再清空避免一次性丢失所有日志# 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命令更温和# 截断文件为 0 字节保留文件属性 truncate -s 0 nohup.out场景 3想保留最后 N 行清空其余内容若需保留最近的日志记录仅清空历史内容# 保留最后 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中直到进程重启。三、关键注意事项避免直接删除文件进程运行时删除nohup.out操作系统会保留文件句柄进程继续写入「不可见的临时文件」导致磁盘空间仍被占用且新日志无法查看。权限问题执行清空命令的用户需有文件写入权限如chmod 664 nohup.out否则会报Permission denied。日志轮转长期方案生产环境建议用logrotate配置日志自动轮转避免nohup.out无限增大# 编辑 logrotate 配置 vi /etc/logrotate.d/app-nohup # 添加配置 /opt/app/nohup.out { daily # 每天轮转 rotate 7 # 保留7天日志 compress # 压缩旧日志 missingok # 文件不存在时不报错 notifempty # 空文件不轮转 create 644 root root # 重建文件的权限 }四、验证清空结果# 查看文件大小应为 0 ls -lh nohup.out # 输出示例-rw-r--r-- 1 root root 0 Mar 11 16:00 nohup.out # 查看文件内容应为空 cat nohup.out总结关键点回顾核心命令 nohup.out或cat /dev/null nohup.out安全清空保留文件生产环境优先清空前先备份避免丢失关键日志避坑要点不要直接删除运行中进程的nohup.out清空后进程仍能正常写入无需重启长期方案用logrotate配置日志自动轮转替代手动清空。按上述方法操作可安全清空nohup.out且不影响正在运行的进程是生产环境的最优实践。