Saya memiliki skrip batch yang memungkinkan saya mematikan situs, menyebarkan file, dan menghidupkan kembali situs.
- Hentikan kumpulan aplikasi - berfungsi
- Hentikan situs web - berfungsi
- Menyebarkan file - berfungsi
- Mulai Application Pool - hanya berfungsi kadang-kadang!
- Mulai situs web - berfungsi jika karya sebelumnya
Saya menjalankan Windows Server 2012 R2, dan skrip batch dijalankan oleh tentakel Octopus Deploy.
Baris yang gagal adalah:
Start-WebAppPool -Name $appPoolName
Di mana $ appPoolName adalah live.website.com
Baris ini kadang-kadang berfungsi tetapi tidak pada yang lain, dan tidak konsisten dalam pola apa pun.
Saya memiliki skrip yang sama bekerja di server lain. Saya telah memeriksa apakah layanan Informasi Aplikasi berjalan dan berjalan dengan baik. Tidak ada log sistem di penampil acara.
Meskipun, saya punya satu kesalahan aplikasi ini yang dinaikkan ketika Start-WebAppPool dipanggil:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
Adakah yang tahu mengapa ini bisa terjadi? Saya telah mencoba untuk menulis loop do-while sampai berada dalam keadaan "Mulai", tetapi loop gagal selamanya.
Memperbarui
Ternyata prosesnya tidak berhenti ketika saya mematikan kumpulan Aplikasi.
Mengapa proses akan terus berjalan setelah menghentikan kumpulan aplikasi? Secara harfiah terus berjalan, tanpa henti.
Tetap!
Jadi - mengikuti komentar di bawah ini, ketika saya menghentikan kumpulan aplikasi saya sekarang memastikan itu benar-benar berhenti sebelum melanjutkan skrip.
Ini skrip yang sekarang saya miliki dan berfungsi sepenuhnya:
# Load IIS module:
Import-Module WebAdministration
# Get AppPool Name
$appPoolName = $OctopusParameters['appPoolName']
if ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Stopped" )
{
Write-Host "AppPool already stopped: " + $appPoolName
}
else
{
Write-Host "Shutting down the AppPool: " + $appPoolName
Write-Host (Get-WebAppPoolState $appPoolName).Value
# Signal to stop.
Stop-WebAppPool -Name $appPoolName
}
do
{
Write-Host (Get-WebAppPoolState $appPoolName).Value
Start-Sleep -Seconds 1
}
until ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Stopped" )