Часть нашего процесса управления веб-приложением заключается в создании WAR в каталоге Dropbox, который используется совместно с нашим веб-сервером (работающим в Amazon EC2). У нас есть сценарий .NET, работающий на веб-сервере, который следит за появлением файлов WAR в папке Dropbox, а затем перемещает их (не копирует) в папку веб-приложений Tomcat. Соответствующий бит кода .NET:
$action = { $path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
Write-Host "Found new WAR file: $path"
### Wait until file is not in use, e.g. copy/move is complete
while (!(IsFileAccessible $path)) {
Write-Host "Waiting for WAR file to be unused."
Start-Sleep -s 10
}
### Move the new WAR file to the server deployment folder.
### Tomcat will detect the new file and deploy it automatically.
Move-Item "$path" "C:\Program Files (x86)\Apache Software Foundation\Tomcat 8.0\webapps" -force
Write-Host "WAR file moved to deployment directory."
}
Обычно это работает нормально, но время от времени Tomcat не может взорвать всю WAR, в результате чего веб-сайт будет поврежден (например, отсутствует index.html). Некоторые файлы и папки есть, но не все. Простое удаление папки развертывания и повторное развертывание Tomcat решает проблему (так что это показывает, что все файлы находятся в WAR, который был перемещен).
Думаю, я на самом деле не знаю, (1) Tomcat не удалось очистить все файлы предыдущего развертывания и вообще НЕ взорвался, или (2) он не извлек все файлы WAR.
Любая идея, что может вызвать такое поведение?