由于一些 Bug 测试,我的 Debian 上的 Squid 服务器收到大量请求。因为这是一个测试,所以我无法禁用日志记录、重新启动服务器或阻止请求。由于日志文件的大小不断增加,我决定在写入时将其删除。Squid 没有创建新的日志文件(下次重新启动时会先创建)。
我试图弄清楚现在后台发生了什么,这些数据是否仍写入硬盘的某个地方,或者在这种情况下发生了什么?我最担心的是因为我有一个 NVME 驱动器。
答案1
一般情况下,如果某个文件处于打开状态,而您删除了该文件,则在至少有一个进程保持该文件打开的情况下,其数据仍会保留在磁盘上。写入此类文件的数据将写入文件系统,因此以这种方式删除的文件会占用文件系统空间,并且会持续增长,直到释放所有文件句柄为止。
删除文件后,应使用systemctl reload squid
或重新加载 squid。这将使 squid 重新初始化而无需实际重新启动,其中包括重新打开日志文件,在此过程中释放旧句柄。squid -k reconfigure
答案2
是的。只要 Squid 进程有文件句柄,它就可以写入文件,数据也会写入磁盘。——同时您可以执行手动移动/删除/链接操作,但这些外部操作不会影响正在运行的进程。
相关评论,不适用于 Squid:这也是为什么 syslogd 支持信号重新打开所有活动日志文件的原因,该功能对于logrotate
(或类似工具)控制旧日志文件是必要的。