はじめに
10月12日〜13日の逆指値GridEAの運用成績を確認しようとしたところ、MT5が勝手に終了していることに気づいた。
10月に入ってから、Ubuntu+XRDP+Wine+MT5 の環境で MT5が突然終了する現象が計3回 発生している。
- 10月1日
- 10月10日
- 10月14日
Wine+XRDP環境は長時間稼働で不安定化することがあるため、原因の切り分けと再発防止策の記録を残す。
実施していた再発防止策
今回のトラブル発生前に、以下の2つの対策を入れていた。
XRDP の切断時にセッションを自動終了
/etc/xrdp/sesman.ini に以下を追加していた。
コード
KillDisconnected=true
DisconnectedTimeLimit=60
目的は「Zombieセッションを残さない」こと。 しかし、XRDPセッションが切断されるタイミングによっては Wine側のプロセスも巻き込んで終了する可能性 がある。
Wine の DISPLAY を固定化
~/.bashrc に以下を追加していた。
コード
export DISPLAY=:10
XRDPはログインのたびに DISPLAY 番号が変わるため、Wine+MT5が起動しない問題を避けるための設定。
今回の停止原因
結論として、再発防止策①(KillDisconnected=true)が MT5 の強制終了を引き起こしていた可能性が高い。
10月14日のログイン直後に「Ubuntu 24.04 internal error」が出ていたことからも、 XRDPセッション管理まわりでプロセスが強制終了された と考えるのが自然。
Wine+XRDP環境は、セッション切断時の挙動が不安定なことがあり、 MT5(terminal64.exe)や wineserver が巻き込まれるケースがある。
対策の見直し
今回の停止は「再発防止策①が原因だった」と判断し、以下の対応を行った。
sesman.ini の設定を元に戻す
KillDisconnected=true と DisconnectedTimeLimit=60 を削除(コメントアウト)し、初期値に戻した。
コード
;; KillDisconnected - kill disconnected sessions
; Default: false
;KillDisconnected=true
;; DisconnectedTimeLimit (seconds)
; Default: 0
;DisconnectedTimeLimit=60
これにより、XRDP切断時に Wine/MT5 が巻き込まれて終了するリスクを回避。
今後について
1週間ほど様子見を行い、MT5が安定稼働するかを確認する。 もし再び Wine+MT5 が長時間稼働で不安定化するようであれば、次の対策を導入する予定。
導入を検討している対策:MT5だけを毎日再起動する方式
Wine+MT5は「長時間連続稼働で不安定化する」ため、 サーバー全体ではなく MT5だけを毎日再起動する方式が最も安全。
以下は導入予定のスクリプト(パスは仮)。
MT5停止スクリプト
/usr/local/bin/mt5_stop.sh
コード
#!/bin/bash
pkill -9 terminal64.exe
pkill -9 wineserver
pkill -9 wine
MT5起動スクリプト
/usr/local/bin/mt5_start.sh
コード
#!/bin/bash
screen -dmS mt5 wine "/home/ubuntu/.wine/drive_c/Program Files/MetaTrader 5/terminal64.exe"
毎日再起動する cron
コード
0 5 * * * /usr/local/bin/mt5_stop.sh
1 5 * * * /usr/local/bin/mt5_start.sh
EAは 日中決済型 のため、早朝の再起動が最も安全。
まとめ
今回の MT5強制終了は、 「再発防止策①(XRDP切断時のセッション自動終了)」が原因だったため、設定を元に戻した。
今後は1週間ほど様子を見て、安定稼働しない場合は MT5だけを毎日再起動する方式 を導入する予定。
Wine+XRDP+MT5環境は、細かい設定の影響が大きいため、 今回のように「対策が逆効果になる」ケースも記録として残していく。