我有一个 cron,它生成了大量(15GB)的 PHP 警告并将它们写入日志文件中。
我终止了该进程,并且作为临时措施,我停止将 stderr 重定向到 stdout,这样我就不会填满我的存储空间。
更改后,我继续收到相同的“高 IO”警告,并且服务器存储暂时增加然后回到以前的大小。原始日志文件是空的。
我发现一个文件lsof -p <PID of cron>
正在变得越来越大。
sh 25626 root 10u REG 202,1 21280244045 773 /tmp/tmpfZ14vFH (deleted)
该文件被标记为已删除,我无法在 /tmp 目录中找到它。
请对此提供一些见解。
当进程运行时,操作系统是否将 stderr 写入临时文件中?
答案1
您必须循环(启动/停止)持有文件句柄的进程。
检查ps -ef |grep 25626
以找到持有它的进程,如果可能,则循环它。它将允许释放文件句柄,并清除磁盘空间。
我知道你已经这样做了(发现这sh
是有问题的过程),但是这是我在笔记中使用的查找这些神秘删除文件的命令(可能是以前在 stack exchange 上找到的):
lsof | grep deleted | numfmt --field=7 --to=iec | head