【技術ログ】Ubuntu+XRDP+Wine+MT5環境で MT5 が勝手に終了していた原因と対策の見直し(10月12日〜14日)

自動売買

はじめに

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環境は、細かい設定の影響が大きいため、 今回のように「対策が逆効果になる」ケースも記録として残していく。

タイトルとURLをコピーしました