当前位置:论坛首页 > BUG提交 > Linux面板

【已记录】Docker日志切割BUG反馈

发表在 BUG提交2026-6-8 10:37 [复制链接] 1 873

问题现象请参考旧帖【待反馈】Docker日志切割BUG反馈


2026-06-08_10-36-22-0.png

26年了还是遇到同样的问题,面板执行Docker日志切割后,面板实时日志一直为0字节,Docker面板里再也刷不出新日志了,生产环境随时要监看且不可能总是重启,这个bug就导致要是开启了日志分割,面板监看就完全失效了。

看了一下/www/server/panel/script/dk_log_split.py源码,脚本里用的是 `os.rename()` 把日志移走,然后新建一个空文件。
`os.rename()` 移动文件并不会改变文件的 inode。Docker 守护进程是一直占着原来那个 inode 持续写日志的。这就导致 Docker 其实一直在往被挪走的“历史备份文件”里写数据,而我们新建的那个同名空文件(拥有全新的 inode)根本接收不到任何 Docker 日志。

建议必须保证原日志文件的 inode 不变,改用复制备份并清空原文件
建议官方修改,在脚本顶部加上 `import shutil`,然后把 `day_split` 和 `size_split` 里的这段重命名逻辑:
  1. os.rename(task['log_path'], split_path + task['pid'] + "-json.log" + '_' + str(int(time.time())))
  2. public.writeFile(task['log_path'], '')
复制代码



改成下面这样:

  1. target_file = split_path + task['pid'] + "-json.log" + '_' + str(int(time.time()))
  2. shutil.copyfile(task['log_path'], target_file)
  3. with open(task['log_path'], 'r+') as f:
  4.     f.truncate(0)
复制代码



这样就可以又备份日志又能让 Docker 从头续写,面板显示就完全正常了。希望开发能早点修复!


使用道具 举报 只看该作者 回复
发表于 2026-6-16 09:39:24 | 显示全部楼层
感谢您的反馈!已记录
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表