有时,但是不幸的是,我的AGS服务经常无故停止。我通常不会注意到这一点,直到用户打电话给我,问他们的地图为什么没有数据。
服务停止时,是否有任何方法(我在考虑Python)可以从AGS获得响应?其他AGS用户如何处理此问题?
有时,但是不幸的是,我的AGS服务经常无故停止。我通常不会注意到这一点,直到用户打电话给我,问他们的地图为什么没有数据。
服务停止时,是否有任何方法(我在考虑Python)可以从AGS获得响应?其他AGS用户如何处理此问题?
Answers:
我已经解决了相同的问题,并且我有此解决方案。我用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。
看来您可以编写一个可在其上运行的python脚本并将其安排为定期运行。该脚本将获取群集中的所有服务,然后查看感兴趣的服务是否存在,如果有,请检查其状态。
否则,通过电子邮件发送通知。
如果需要,脚本也可以(重新)启动服务。
我不确定,但是ArcPy管理软件包 admin可能提供使用此API的方法。
当前,我们使用此ServiceMonitor批处理脚本,该脚本执行电子邮件通知。我们将其设置为Windows预定任务,因此它每天早晨运行。
唯一的缺点是,由于我们拥有大量服务,因此需要花费相当长的时间才能运行,因此我们无法根据需要频繁运行它。也许Admin REST API或ArcPy会更快。
在空闲时间,我研究了Python脚本,该脚本生成对ArcGIS Server REST URL的Web请求并评估服务的响应。如果答案是否定的,将向特定的电子邮件地址发送电子邮件警报。
我认为这很简单,但是对于监视ArcGIS Server的单个服务很有用。我希望这对某人有帮助。
我们博客中的所有信息:http : //oneteamgis.wordpress.com/2014/03/24/uno-script-python-che-monitora-i-servizi-di-arcgis-server/
达米亚诺