Планировщик задач Windows Server: Выполнение запланированного отказоустойчивого исполняемого файла?

Ответ находится на этом форуме. http://www.windows-noob.com/forums/index.php?/topic/1660-customising-windows-7-deployments-part-1/ это работало на меня.

2
задан 24 September 2012 в 10:53
1 ответ

Если вы не можете кластеризовать, но вы можете иметь несколько компьютеров на в той же сети, тогда вы можете обернуть свой исполняемый файл в оболочку 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}

Сохраните его как файл .PS1 на сервере 1 и укажите для запланированной задачи "C: \ windows \ system32 \ windowspowershell \ v1.0 \ powershell.exe D: \ BIN \ script.ps1" .

Важно проверить, что ваш исполняемый файл что-то возвращает в $ Lastexitcode, если он работает. В противном случае он никогда не запишет выходной файл. Дело в том, что он будет обнаруживать любые сбои, даже если сервер доступен, но исполняемый файл не может выполняться должным образом. Если это не сработает, попробуйте "$?" вместо $ 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"
    }

Это должно дать Вам нужна небольшая избыточность.

* Я не тестировал это, но это должно вас приблизить

Это вернет 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"
    }

Это должно дать Вам нужна небольшая избыточность.

* Я не тестировал это, но это должно вас приблизить

Это вернет 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"
    }

Это должно дать Вам нужна небольшая избыточность.

* Я не тестировал это, но это должно вас приблизить

1
ответ дан 3 December 2019 в 13:05

Теги

Похожие вопросы