凌晨三点被VPS告警短信吵醒,上去一看磁盘只剩不到200M,MT4的日志文件把根分区吃满了,EA直接停止写日志,订单执行记录全断。这事我遇到过两次,第二次才彻底把日志轮转配明白,今天把这个坑完整讲一遍。
先说问题根源。MT4/MT5在VPS上长期跑,MQL4/Logs和MQL5/Logs目录下的日志是按天生成的,但默认不会自动删。跑欧美M15的EA一天下来日志轻松几十M,加上策略测试缓存和tick数据,一个月就能把20G的盘塞满。我第一次是手动rm,结果删到一半SSH断了,后来才知道得先停终端再清。
解决方案分三步走,我按自己实操的顺序写:
踩过的坑补充两个:一是别用rm -rf直接删正在写的日志,MT4会报错甚至卡死,用truncate更稳;二是rotate保留份数别设太大,7天足够排查问题,设30天等于没清。另外VPS如果是2G内存的小机器,压缩日志时注意CPU占用,别在非农数据前后跑轮转。
配好之后我这台跑镑美和黄金的机器稳了三个月没再告警。你们VPS上日志一般留几天,有没有遇到过轮转后终端写日志异常的情况?
先说问题根源。MT4/MT5在VPS上长期跑,MQL4/Logs和MQL5/Logs目录下的日志是按天生成的,但默认不会自动删。跑欧美M15的EA一天下来日志轻松几十M,加上策略测试缓存和tick数据,一个月就能把20G的盘塞满。我第一次是手动rm,结果删到一半SSH断了,后来才知道得先停终端再清。
解决方案分三步走,我按自己实操的顺序写:
- 第一步,先定位大头。用 du -sh /root/.wine/drive_c/Program*/MetaTrader*/MQL4/Logs 看日志目录实际占用,再 df -h 确认根分区水位。别急着删,先看清楚是日志还是tick缓存占的。
- 第二步,配logrotate。在 /etc/logrotate.d/mt4 新建配置,路径指向日志目录,关键参数是 daily、rotate 7、compress、missingok,最后加 copytruncate。这个copytruncate是重点,MT4进程不会重开日志句柄,不加这个参数轮转后终端还在往旧inode写,等于白配。我第一次就是漏了它,日志轮转看着成功,实际磁盘没降。
- 第三步,手动触发验证。logrotate -f /etc/logrotate.d/mt4 跑一次,再df确认空间释放。建议顺手把策略测试的tick缓存目录也加一条规则,那个才是真正的空间杀手。
踩过的坑补充两个:一是别用rm -rf直接删正在写的日志,MT4会报错甚至卡死,用truncate更稳;二是rotate保留份数别设太大,7天足够排查问题,设30天等于没清。另外VPS如果是2G内存的小机器,压缩日志时注意CPU占用,别在非农数据前后跑轮转。
配好之后我这台跑镑美和黄金的机器稳了三个月没再告警。你们VPS上日志一般留几天,有没有遇到过轮转后终端写日志异常的情况?
