Действительно ли возможно создать удаленное резервное копирование сайта с MSDeploy?

Существует флаг на ftp то, что можно использовать для остановки автоматического запроса пароля при отправке пользовательской команды.

ftp человека

ftp -n

Затем можно передать команды по каналу (включая пользователя и передачу) к ftp.

0
задан 2 August 2011 в 13:04
1 ответ

Я полагаю, вы не используете самодельные сценарии высокой доступности. Они ненадежны, вы можете забыть о них, они не спасают вас от ситуации разделения мозга .

В вашем случае вам следует использовать виртуальный IP, который перемещается между двумя узлами вашего кластера. Для этого существует множество программ:

  • lvs (ipvsadm);
  • сердцебиение;
  • кардиостимулятор + corosync (я думаю, лучшее решение). Bellow - это простой сценарий PowerShell, который выполняет две функции. Отправить файлы - синхронизирует локальную папку с удаленным сервером. Execute-RemoteCommand - выполняет командный файл на удаленном сервере. Файл уже должен быть на сервере.

    $MSDeployExe = "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
    $RemoteHost = "http://localhost:80/MsDeployAgentService"
    $Credentials = ""
    $LocalDir = "C:\temp\LocalDir"
    $RemoteDir = "C:\temp\RemoteDir"
    
    function Send-Files {
            param (
                    [string]$WebDeployService,
                    [string]$LocalDir,
                    [string]$RemoteDir,
                    [string]$Credentials
            )
    
            Write-Host "Sending files to $WebDeployService`: $RemoteDir" -ForegroundColor Yellow
    
            if ($Credentials -ne "") {
                    $Credentials = ",getCredentials=" + $Credentials
            }
    
            & $MSDeployExe "-verb:sync" "-source:dirPath=$LocalDir" "-dest:dirPath=$RemoteDir,computername=$WebDeployService$Credentials" "-verbose"
            $successful = $?
    
            if (-not $successful) {
                    throw "Failed sending files"
            }
    }
    
    function Execute-RemoteCommand {
            param (
                    [string]$WebDeployService,
                    [string]$RemoteDir,
                    [string]$BatchFile,
                    [string]$Credentials,
                    [int]$waitInterval = 15000
            )
    
            $command = Join-Path $RemoteDir $BatchFile
            Write-Host "Executing $command on $WebDeployService" -ForegroundColor Yellow
    
            & $MSDeployExe "-verb:sync" "-source:runCommand=’$command’,waitInterval=$waitInterval,waitAttempts=1" "-dest:auto,computername=$RemoteHost$Credentials" "-verbose"
    
            $successful = $?
    
            if (-not $successful) {
                    throw "Failed executing command"
            }
    }
    
    # Test
    Send-Files $RemoteHost $LocalDir $RemoteDir $Credentials
    Execute-RemoteCommand $RemoteHost $RemoteDir "HelloWorld.bat" $Credentials
    
0
ответ дан 5 December 2019 в 17:01

Теги

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