必须立即清理Workerman日志以防止服务中断,先定位真实日志路径(通过/proc/PID/fd/),再用truncate -s 0安全清空;同时配置logrotate自动轮转并调低日志级别至WARNING。

Workerman日志文件持续增长导致磁盘空间告急,必须立即清理,否则服务可能因写入失败而中断或崩溃。
确认日志实际路径与占用情况
先用 ps aux | grep start.php 找到 Workerman 主进程 PID,再执行 ls -lh /proc/<strong>【PID】</strong>/fd/ | grep log 查看当前被打开的日志文件句柄——这才是真实在写的日志路径,不是配置里写的默认路径。很多项目改了 Logger::$logFile 却忘了重启,旧进程还在往老路径疯狂写入。
运行 du -sh ./logs/* 2>/dev/null | sort -hr | head -5 快速定位最大的几个日志文件。
安全清空正在被写入的日志文件
不能直接 rm 删除,否则 Workerman 进程会继续向已删除的 inode 写数据,磁盘空间不会释放,且日志功能彻底失效。
方法一:用 truncate 强制归零(推荐)sudo truncate -s 0 ./logs/workerman.log
这一步会把文件内容清空,但保留文件权限、所有者和打开句柄,Workerman 下一秒就能继续写入新日志。
方法二:重定向清空sudo sh -c '> ./logs/workerman.log'
注意必须用 sh -c 包裹,否则 sudo 不作用于重定向操作符。
【关键提醒】 如果日志路径是软链接(如 logs → /data/logs),truncate 操作会作用于目标文件,而非链接本身——请先 ls -l logs 确认是否为软链。
设置自动日志轮转与清理
第一步:启用 Linux 自带的 logrotate
创建配置文件 /etc/logrotate.d/workerman:
/path/to/your/project/logs/*.log {<br>
daily<br>
missingok<br>
rotate 7<br>
compress<br>
delaycompress<br>
notifempty<br>
create 644 www-data www-data<br>
sharedscripts<br>
postrotate<br>
if [ -f /path/to/your/project/pid ]; then<br>
kill -USR1 $(cat /path/to/your/project/pid)<br>
fi<br>
endscript<br>
}
第二步:验证配置是否生效sudo logrotate -d /etc/logrotate.d/workerman 查看调试输出,确认匹配规则和动作无误。
第三步:强制执行一次轮转测试sudo logrotate -f /etc/logrotate.d/workerman,检查 logs/ 目录下是否生成 workerman.log.1 并压缩,原文件是否变为空。
永久降低日志输出量
在 Workerman 入口文件(如 start.php)顶部添加:
use Workerman\Logger;<br> Logger::$logLevel = Logger::WARNING;
这行代码必须放在 Worker::runAll() 之前,且不能被任何条件包裹——否则启动时未加载,日志级别仍为默认的 INFO。
如果项目中存在自定义 echo、var_dump 或手动调用 error_log(),全部删掉或注释。Workerman 的 Worker 实例生命周期内,这些输出会被捕获并塞进日志,比 Logger 本身更难控制。

















