Windows-Server-2008

Windows Server 任務計劃程序:執行計劃的執行檔故障安全?

  • September 24, 2012

我有一個執行檔,我計劃每五分鐘執行一次(使用 Window 的內置任務計劃程序)。執行此執行檔至關重要,因為它更新了很少的時間關鍵文件。但是,如果執行執行檔的虛擬伺服器出現故障,我該如何應對?在任何時候,跑步之間的休息時間都不應超過 15 分鐘。

當我使用 Windows Server 及其任務計劃程序時,我想知道是否可以創建某種自動處理這種情況的集群?問題是有問題的伺服器在 Windows Azure 上執行,我認為我不能使用虛擬機創建實際的集群。

如果問題可以使用 3rd 方工具解決,那也沒關係。稍微概括一下這個問題:即使可能出現伺服器故障,如何確保每 5 分鐘執行一次執行檔?

如果你不能集群,但你可以在同一個網路上有多台機器,那麼你可以將你的執行檔包裝在一些 powershell 中。

在第一台伺服器上執行它時,您會創建一個文件以指示成功。然後第二台伺服器執行單獨的程式碼來查找該臨時文件,如果它不存在,它將啟動。

伺服器 1

$strDateTime = Get-Date -Format ddMMyy-hh:mm
$strPathtoTempFile = "D:\TempFile"
$strPathtoEXE = "D:\BIN\file.exe"

IF((Test-Path $strPathtoTempFile) -eq 'True'){remove-item $PathtoTempFile}

Start-Process $strPathtoEXE -Wait
If($Lastexitcode -eq 0){$strDateTime | Out-File $strPathtoTempFile}

將此保存為伺服器 1 上的 .PS1 文件,並將您的計劃任務指向*“C:\windows\system32\windowspowershell\v1.0\powershell.exe D:\BIN\script.ps1”*。

測試您的執行檔是否返回某些內容很重要 $ Lastexitcode if it works. Other wise it will never write the output file. The point of this is that it will catch any failures even if the server is available but the executable fails to execute properly. If this doesn’t work try ’ $ ?代替 $Lastexitcode。這將返回 True 或 False。同樣,您將需要對其進行測試。

在伺服器 2 上將此作為計劃任務執行,但從第一台伺服器上的計劃開始後 1 分鐘開始每五分鐘執行一次:

伺服器 2

$strDateTime = Get-Date -Format ddMMyy-hh:mm
$strPathtoTempFile = "\\Server1\TempFile"
$strPathtoEXE = "D:\BIN\file.exe"

IF((Test-Path $strPathtoTempFile) -eq 'Flase')
   {
   Start-Process $strPathtoEXE
   Send-Mailmessage -smtpserver smtp.server.com -to support@company.com -from executable@company.com -subject "Launched on backup" -body "Executable failed on server1, ran from backup server on $strDateTime"
   }

這應該會給你一些你需要的冗餘。

*我還沒有測試過,但它應該讓你接近

引用自:https://serverfault.com/questions/431286