때때로, 그러나 불행히도 종종 내 AGS 서비스는 아무 이유없이 멈 춥니 다. 일반적으로 사용자가 전화하여지도에 데이터가없는 이유를 묻기 전까지는이 사실을 알지 못합니다.
서비스가 중지되면 AGS로부터 응답을받을 수있는 방법이 있습니까? 다른 AGS 사용자는이 문제를 어떻게 처리합니까?
때때로, 그러나 불행히도 종종 내 AGS 서비스는 아무 이유없이 멈 춥니 다. 일반적으로 사용자가 전화하여지도에 데이터가없는 이유를 묻기 전까지는이 사실을 알지 못합니다.
서비스가 중지되면 AGS로부터 응답을받을 수있는 방법이 있습니까? 다른 AGS 사용자는이 문제를 어떻게 처리합니까?
답변:
나는 같은 문제를 해결 했으며이 솔루션을 가지고 있습니다. 아래 코드를 Python으로 작성했습니다 (URL의 "localhost"가 AGS 서버 이름으로 변경됨).
# -*- coding: cp1250 -*-
import smtplib, urllib
from email import Encoders
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.Utils import formatdate
from email.MIMEText import MIMEText
from email.MIMEMessage import MIMEMessage
COMMASPACE = ', '
SERVER = "IP adresss of post server"
FROM = "email adress from"
TO = ['1.email adress to','2.email adress to']
SUBJECT = "Some services on ArcGIS Server are down"
ServicesDown = []
CountOfServicesDown=0
TEXT="No problem"
# 1. Service - mapservice1
print "Test of service - mapservice1"
opener = urllib.FancyURLopener({})
f = opener.open("http://"localhost"/arcgis/rest/services/mapservice1/MapServer?wsdl")
code = urllib.urlopen("http://"localhost"/arcgis/rest/services/mapservice1/MapServer?wsdl"?wsdl").getcode()
if code is not 200:
print "code: ", code
print "mapservice1 is down"
ServicesDown.append("mapservice1")
CountOfServicesDown=CountOfServicesDown+1
else:
print "service is OK"
# 2. Service - mapservice2
print "Test of service - mapservice2"
opener = urllib.FancyURLopener({})
f = opener.open("http://"localhost"/arcgis/rest/services/mapservice2/MapServer?wsdl")
code = urllib.urlopen("http://"localhost"/arcgis/rest/services/mapservice2/MapServer?wsdl"?wsdl").getcode()
if code is not 200:
print "code: ", code
print "mapservice1 is down"
ServicesDown.append("mapservice2")
CountOfServicesDown=CountOfServicesDown+1
else:
print "service is OK"
print "\r\n"+"ServicesDown: ",ServicesDown
print "CountOfServicesDown= ",CountOfServicesDown
if CountOfServicesDown > 0:
TEXT = "There are down this services: "+str(ServicesDown[:CountOfServicesDown])
print "TEXT: ", TEXT
# Prepare actual message
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
print "\r\n"+"Email was send"
else:
print "\r\n"+"There is no problem on AGS services"
ArcGIS Server Admin REST API 를 살펴 보겠습니다 .
실행중인 파이썬 스크립트를 작성하고 주기적으로 실행되도록 예약 할 수있는 것처럼 보입니다. 스크립트는 클러스터에있는 모든 서비스를 가져온 다음 관심있는 서비스가 있는지 확인하고 상태가 있는지 확인 합니다 .
그렇지 않으면 알림 이메일을 보내십시오.
원하는 경우 스크립트가 서비스를 다시 시작할 수도 있습니다.
확실하지 않지만 ArcPy 관리자 패키지 관리자는이 API를 사용하는 방법을 제공 할 수 있습니다.
현재이 ServiceMonitor 배치 스크립트를 사용합니다.이 스크립트는 전자 메일 알림을 수행합니다. 매일 아침 실행되도록 Windows 예약 작업으로 설정했습니다.
유일한 단점은 많은 서비스가 있기 때문에 실행하는 데 시간이 오래 걸리므로 원하는만큼 자주 실행할 수 없다는 것입니다. 어쩌면 Admin REST API 또는 ArcPy가 더 빠를 수 있습니다.
자유 시간에 ArcGIS 서버 REST URL에 대한 웹 요청을 생성하고 서비스의 응답을 평가하는 Python 스크립트를 작업했습니다. 답변이 부정적이면 특정 이메일 주소로 이메일 알림이 전송됩니다.
ArcGIS Server의 개별 서비스를 모니터링하는 데 간단하지만 유용하다고 생각합니다. 나는 그것이 누군가에게 도움이되기를 바랍니다.
블로그의 모든 정보 : http://oneteamgis.wordpress.com/2014/03/24/uno-script-python-che-monitora-i-servizi-di-arcgis-server/
다미아노