Wscript がインストールされている場合 (そうあるべきだと思います)、これを試すことができます。「somethingorother.vbs」として保存し、時々実行します。または、提供されたループを使用できます。loop オプションと kill-for-real オプションの両方がコメント化されています。実動サーバーでコメントを外す前に、スクリプトをテストしてください。
「mysqladmin processlist」の出力は次のようになると思います (XP から取得)。
+----+------+----------------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+----------------+----+---------+------+-------+------------------+
| 21 | root | localhost:1648 | | Query | 0 | | show processlist |
+----+------+----------------+----+---------+------+-------+------------------+
したがって、「----」を含む行と「Id | User」を含む行を削除する必要があり、残っているのは
| 21 | root | localhost:1648 | | Query | 0 | | show processlist |
パイプ記号「|」で分割すると、0 から 8 までの 9 つのフィールドを取得できます。
0 1 2 3 4 5 6 7 8
| 21 | root | localhost:1648 | | Query | 0 | | show processlist |
フィールド #1 は Id で、フィールド #6 は実行時間を生成します。
Option Explicit
Dim objShell, objWshScriptExec, objStdOut, strLine
Dim id, fields, rt, Killer, KillRun
' While True
' WScript.Sleep 150000
Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("mysqladmin processlist")
Set objStdOut = objWshScriptExec.StdOut
While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If (InStr(strLine, "----") = 0 and InStr(strLine, "| Id | User |") = 0) Then
fields = Split(strLine, "|")
id = trim(fields(1))
rt = trim(fields(6))
If rt > 150 Then
' Set Killer = CreateObject("WScript.Shell")
' Set KillRun = objShell.Exec("mysqladmin kill " & id)
echo
End If
End If
Wend
' Wend