2013-10-16 4 views
1

웹 사이트를 운영하는 서버를 가지고 있는데, 어떤 이유로 든 기분이 좋을 때마다 죽은 웹 사이트가 있습니다. 왜 내가 설명 할이 솔루션이 화재를 내고 문제를 해결하지 못하는지 알 수 있을지 모르겠습니다. 그러나 지금은 괜찮습니다.Powershell에서 웹 사이트를 사용할 수 있는지 계속 확인하십시오.

그래서 웹 사이트를 사용할 수 있는지 여부를 지속적으로 확인하는 서버에서 Powershellscript를 실행하여 다시 실행할 수있는 마법을 수행합니다.

지금까지이 코드가 있습니다.

아파치를 켜고 스크립트를 실행하면 "실행 중"기능이 작동합니다. 아파치를 끄고 스크립트를 실행하면 "notrunning"기능이 작동합니다.

하지만 문제는 아파치를 시작할 때 스크립트를 실행하고 "실행 중"이 반복적으로 반복되고 아파치 (스크립트가 계속 실행 중임)를 돌려서 "notrunning"으로 이동하여 문제를 해결합니다. , 내 서비스를 다시 시작하고 사이트가 시작되면 "시작"에서 "실행"으로 이동하십시오. 하지만 "실행 중"에 붙어서 "알지 못하는"상태로 바뀌지는 않을 것입니다.

내가 어떻게 이런 일이 일어날 수 있는지 생각해보십시오.

function checkSite 
{ 
[string] $url = 'http://websitegoeshere.com' 
[net.httpWebRequest] $req = [net.webRequest]::create($url) 
$req.Method = "HEAD" 
[net.httpWebResponse] $res = $req.getResponse() 
while ($res.StatusCode -ge "200") {running} notrunning 
} 

function running 
{ 
cls; 
Write-Host " -=IS-checker=-" -fore yellow 
Write-Host "" -fore green 
Write-Host "----------------------" -fore green 
Write-Host " Access to web = OK " -fore green 
Write-Host "----------------------" -fore green 
sleep 60 
} 
function notrunning 
{ 
cls; 
Write-Host "-=IS-checker=-" -fore yellow 
Write-Host "" -fore red 
Write-Host "-------------------------" -fore red 
Write-Host " Site down - Site Down " -fore red 
Write-Host "-------------------------" -fore red 
sleep 2 
$process = "process-name-goes-here" 
Write-Host "Stopping process" $process -fore red 
Stop-Process -processname $process 
sleep 5 
$service = "service-name-goes-here" 
Write-Host "Killing service" $service -fore red 
Stop-Service $service -Force 
sleep 5 
Write-Host "Starting service" $service -fore green 
Start-Service $service 
sleep 5 
$LogTime = Get-Date -Format "yyyy-MM-dd hh-mm-ss" 
$LogFile = 'C:\PSLog\'+"LOG_"+$LogTime+".log" 
$LogTime+" Stopped "+$process+", Stopped "+$service+", Started "+$service | Out-File $LogFile 
Write-Host "Logfile written to"$LogFile -fore green 
sleep 5 
checkSite 
} 

checkSite

(나는 내 ​​companys sake에 대한 실제 프로세스 및 서비스 이름을 꺼내 스크립트를 편집)
+1

당신이 얻을 수있는 도구가 있습니다 (일부는 무료/오픈 소스이고, [others] (http://www.paessler.com/network_monitoring/website_monitoring)는 업그레이드해야 할 수도있는 유료 버전입니다). 당신을위한 웹 사이트는 경보를 발령하거나 응답하지 않을 때 다른 행동을 취합니다. 왜 바퀴를 재발견합니까? – alroc

+1

방금 ​​PowerShell을 배우기 시작했고 뭔가 유용한 것을 만드는 것이 재미있을 거라고 생각했습니다. – Frigol33t

+1

규칙 # 1 : 순전히 교육용 훈련이 아닌 한 누군가가 이미 작성한 (또는 비용을 지불하지 않고 제공하는) 것을 만들지 마십시오. 그들은 아마 더 잘했을 것입니다. 그것은 비즈니스 상황에서 중요해질 수 있습니다. – alroc

답변

0

첫째 :이이 PowerShell을 사용에 운동 이외의 다른위한 경우 나는 Alroc와 동의한다 : 윈도 박스에있는 에이전트로부터 Powershell 스크립트를 실행할 수 있기 때문에 무료/오픈 소스 도구/시스템을 찾는다.

그러나 연습용으로 Powershell을 사용하려는 경우 PowerShell 스크립트 내부에서 작업 스케줄러를 제어하는 ​​데 사용할 수있는 Powershell ScheduledJob 모듈 cmdlet을 사용해보십시오.

Powershell에는 자체 스케줄러가 없으므로 대부분의 경우 Windows 작업 스케줄러를 사용하여 정기적으로 스크립트를 실행합니다.

기본적으로 명령 줄 실행 (명령 줄 매개 변수를 스크립트로 보내려면 Param 조회)을 실행하고 일정에 따라 스크립트를 실행하도록 예약 된 작업을 설정하는 스크립트를 작성해야합니다. 경고는 예약 된 작업이나 스크립트 자체에서 처리해야합니다 (잘못된 긍정 경고를 피하려면 스크립트 자체 내에서 제안하는 것이 좋습니다).

자동화 분야에서는 이벤트/트리거에 ms 지연이 전혀 발생하지 않으므로 수표 반복을 초소형 (1 분)으로 설정할 수 있습니다. 그러나 웹 사이트 가동 시간 확인을 위해, 매 5 분마다 (일반적으로) 매우 빈번하게 간주됩니다 (일반적으로 사이트의 중요도에 따라 10-30 분). HTTP를 가지고 놀기

Powershell ScheduledJob 모듈 cmdlets를 사용하는 방법에 대한 훌륭한 wrightup이 있습니다. 원하는 작업을 수행 할 수있는 기능이 이미 있으므로 작업에 적용하기가 매우 쉽습니다.

http://blogs.technet.com/b/heyscriptingguy/archive/2012/09/18/create-a-powershell-scheduled-job.aspx

여기 PowerShell로 웹 사이트 모니터링에 대한 몇 가지 다른 소스입니다 : http://blogs.technet.com/b/otto/archive/2007/08/23/quick-and-dirty-web-site-monitoring-with-powershell.aspx

http://dmitrysotnikov.wordpress.com/2008/05/29/monitor-web-site-availability/

당신은 (200) 외에 (웹 사이트 테스트를 자동화하는 것이 더 자세하고 독창적 인 방법으로 얻고 싶은 경우에/사용 가능한 테스트), Autobrowse Powershell 모듈을 확인하십시오. http://autobrowse.start-automating.com/

0

thi 단지 실천 운동 인, 당신의 무한 루프는이 라인에 의해 발생되는 S :

동안

주 notrunning ($ res.StatusCode -ge "200") {실행} 그 '실행'기능에서 아무것도 $ res가 변경되므로 항상 시작한 값이되며 실행중인 함수가 계속 변경 될 때까지 계속해서 실행됩니다.

+0

하지만 함수 checkSite로 시작하여 페이지가 실행 중인지 여부를 확인하고 실행 (실행/실행 안 함) 및 새 checkSite로 시작한 후 조치를 취하십시오. 실행/변경하지 않고 $ res를 변경하고 싶지 않습니다. 스크립트에서 "확인 (OK), 5 분 전이 아니 었습니다. 지금은 어때요? 다시 확인해 보겠습니다."예, 이제 끝났습니다. " – Frigol33t

관련 문제