首页/系统/Linux 运维命令速查/场景:不重启服务切割日志
本包目录(613 条)
文件与目录76 条文本处理77 条网络命令82 条
进程与作业69 条
磁盘与文件系统51 条用户与权限44 条日志与排查40 条systemd 与服务42 条包管理34 条性能与监控48 条定时任务与计划50 条

场景:不重启服务切割日志

应用把日志写进单文件越滚越大:mv 后让应用重开句柄(kill -USR1 或应用自带 reopen),或用 copytruncate 兜底。

Linux 运维命令速查系统更新于 2026-10-12
场景手工日志切割(不丢不重启)
组合mv + kill -USR1 + 压缩归档

标准流程(USR1 型)

标准流程(USR1 型)
cd /var/log/app
mv app.log app.log.$(date +%F)      # 1 改名(句柄仍指向旧文件)
kill -USR1 $(cat /run/app.pid)      # 2 让应用重开日志文件
 ls -l /proc/$(cat /run/app.pid)/fd | grep app.log  # 3 确认指向新文件
gzip app.log.$(date +%F)            # 4 归档压缩

copytruncate 型(应用不支持信号)

copytruncate 型(应用不支持信号)
cp app.log app.log.bak && truncate -s 0 app.log
# 注意:copy 与 truncate 之间有丢小段日志的窗口
生产应交给 logrotate 配 postrotate 脚本自动做;手工版用于应急与不常见应用。

易错点

  • 先确认应用对信号的行为(USR1 是重开日志还是其他语义):查官方文档,别拿错信号
  • truncate 为 0 的瞬间文件仍被写:极端并发下旧内容可能被覆盖写丢失

数据来源与参考

  • man 1 logrotate(logrotate 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌