0

IIS を使用してレガシー ASP.NET Web サービスをホストする Windows 2003 Server を使用しています。この Web サービスは、制御できないリモート Oracle データベース サーバー上のデータベースに接続します。問題は、データベース サーバーが毎週または 2 週間ごとにダウンし、その後約 5 分後に復旧することです。Web サービスが再び機能する前に、IIS を再起動して破損した接続を削除する必要があります。

特定のエラー コード (この場合は ORA- タイプのエラーになりますが、Windows エラー コードを取得できます) が発生したときにイベントをトリガーする (つまり、自分自身に電子メールを送信したり、IIS をリセットしたりする) 最善の方法は何ですか?

IIS 設定?

タスクスケジューラ? (Windows 2003サーバーで信じられているスケジュールされたタスクのみに限定されます。たとえば、日/週/月など)

Powershell スクリプト?

その他のオプション?

Windows 2008 Server では、サーバーのエラー ログに特定のエラー コードが記録されたときにイベントをトリガーするようにタスク スケジューラを構成できることを知っていますが、Windows 2003 Server のタスク スケジューラではこのようなものを見つけることができません。

ありがとう。

4

1 に答える 1

0

SQL Server のエラー ログを監視し、特定のエラーを報告するために、powershell シェル スクリプトを作成しました。最後に読み取りを停止した場所を保存し、次にスクリプトを実行したときにその時点から続行しました。実際にログを読む部分です。次に、一時ファイルに位置を保存し、これをスケジュールされたタスクとして実行するだけです。エラーが発生した場合はメールを送信するか、一部のサービスを再起動します。

$path = $logs.file
Write-Host $path
if($currentLog.lastpos -ne $null){$pos = $currentLog.lastpos}
else{$pos = 0}
if($logs.enc -eq $null){$br = New-Object System.IO.BinaryReader([System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite))}
else{
    $encoding = $logs.enc.toUpper().Replace('-','')
    if($encoding -eq 'UTF16'){$encoding = 'Unicode'}
    $br = New-Object System.IO.BinaryReader([System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite), [System.Text.Encoding]::$encoding)
}
$required = $br.BaseStream.Length - $pos
if($required -lt 0){
    $pos = 0
    $required = $br.BaseStream.Length
}
if($required -eq 0){$br.close(); return $null}
$br.BaseStream.Seek($pos, [System.IO.SeekOrigin]::Begin)|Out-Null
$bytes = $br.ReadBytes($required)
$result = [System.Text.Encoding]::Unicode.GetString($bytes)
$split = $result.Split("`n")
foreach($s in $split)
{
    if($s.contains("  Error:"))
    {
        #Filter events here
    }
}
$currentLog.lastpos = $br.BaseStream.Position 
$br.close()
于 2012-07-13T10:28:13.870 に答える