¿Iniciar y detener los servicios de mapas de ArcGIS Server con Python?

10

¿Es posible detener e iniciar mediante programación los servicios de mapas de ArcGIS Server usando Python?

Jeff Berry
fuente
Esta es solo una consulta REST.
Vince
Gracias. Pero necesito escribir el nombre de usuario y la contraseña en mi script .py, alguna idea de cómo evitar esto. Por ejemplo, ¿puedo usar el archivo .ags?)
Lora
Lamentablemente no; dejaron un agujero importante en el diseño cuando no pudieron proporcionar una función para convertir un .agsarchivo en un token. Es posible que pueda intentar conectarse con un certificado (archivo PEM), aunque esto requiere más que HTTP simple.
Vince

Respuestas:

7

En ArcGIS 10.0, para servicios individuales, como podría ser la línea de comandos para mantener ArcIMS, hay una herramienta de línea de comandos que puede descargar de la Galería de códigos ( AGSSOM ) que le brinda el núcleo de las áreas principales, pero no existe un servicio específico específico. 'control de nivel que puede utilizar en este momento para iniciar / detener / actualizar / agregar / eliminar servicios AGS.

En ideas.arcgis.com hay varios lugares con solicitudes para mejorar el control de los servicios desde una ubicación más automatizable.

DEWright
fuente
El enlace a ArcGIS Ideas está roto. En cualquier caso, tal vez esta respuesta se pueda actualizar a 10.7.
PolyGeo
12

Para aquellos que usan ArcGIS 10.0 y están interesados ​​en usar AGSSOM como lo recomienda DE Wright, he reunido el siguiente código. Esto detendrá todos los servicios y le permitirá realizar las tareas de geodatabase necesarias, y luego reiniciará los servicios que se ejecutaban anteriormente.

import os, subprocess

#Get list of currently running map services
stream = os.popen('D:\GIS\Admin\AGSSOMv10.0\AGSSOM.exe -list')
mapservices = stream.readlines()
lstStarted = []

for item in mapservices:
    itemSplit = item.split(',')
    if len(itemSplit) > 1:
        if itemSplit[1].find("Started.") > -1:
            lstStarted.append(itemSplit[0])

#Shutdown all map services
subprocess.call(['D:\GIS\Admin\AGSSOMv10.0\AGSSOM.exe', '-x', '*all*'])

##...Perfom geodatabase tasks here

#Restart previously running map services
for mapservice in lstStarted:
    subprocess.call(['D:\GIS\Admin\AGSSOMv10.0\AGSSOM.exe', '-s', mapservice])
Jeff Berry
fuente
4

A partir de ArcGIS Server 10.3, varias utilidades de línea de comandos basadas en Python vienen incluidas con el servidor ArcGIS.

Según la documentación de esri, generalmente se instalan aquí:

C:\Program Files\ArcGIS\Server\tools\admin

La utilidad de administración de servicios es excelente para iniciar, detener o eliminar servicios:

python manageservice.py -u admin -p admin -s http://gisserver.domain.com:6080 -n Beirut/Parcels -o start

Charlie Hofmann
fuente
3

En la misma línea que lo que Jeff Berry publicó en su respuesta, escribí una pequeña función que administrará los servicios de mapas de ArcGIS Server 10.0 utilizando las herramientas AGSSOM.

En mi caso, llamo a los servicios individualmente por mi nombre, deteniéndome y comenzando uno a la vez.

import subprocess

def manageMapServices(command, svc, svcType):
    PathToAGSSOM = r"C:\Windows\AGSSOMUtils\AGSSOM"
    server = "AGSSOM"
    p = subprocess.Popen(PathToAGSSOM + " " + server + " " + command + " " + svc + " " + svcType)
    p.wait()

Luego, puede llamar a un servicio por su nombre usando -x para detener y -s para comenzar:

manageMapServices("-s", "Folder/Service", "MapServer")
Timothy Michael
fuente
2

Para ArcGIS 10.7, y algunas versiones anteriores, puede encontrar un conjunto completo de scripts de Python para detener, iniciar, eliminar y muchas otras cosas aquí: http://www.arcgis.com/home/item.html?id= 12dde73e0e784e47818162b4d41ee340 (también hay un .exe dentro de este si necesita un ejecutable completo)

O sumérjase en la ayuda y lea acerca de las muchas opciones (línea de comando lista para usar, API de Python, fragmentos de código) aquí: https://enterprise.arcgis.com/en/server/latest/administer/linux/scripting-arcgis -server-administration.htm

Sin embargo, todos estos puntos se incluyen como otras respuestas en la pregunta a la que hizo referencia. AGSSOM era una utilidad .net escrita para Server 10.0 y versiones anteriores. Se produjo una versión 10.1 y más nueva, pero nunca ganó popularidad ya que no se necesitaba un código c # / vb pesado para interactuar con el servidor. Server 10.1+ se lanzó con una API REST bien estructurada, que permite lenguajes de alto nivel, como Python, y, por lo tanto, un público más amplio para escribir y administrar sin la necesidad de la gran utilidad agssom.exe.

KHibma
fuente
Pero necesito escribir el nombre de usuario y la contraseña en mi script .py, alguna idea de cómo evitar esto. Por ejemplo, ¿puedo usar el archivo .ags?)
Lora
No puede utilizar el archivo .ags como mecanismo para detener / iniciar servicios. La contraseña debe guardarse en un archivo, en algún lugar. Ya sea que se trate del archivo .py, o si desea colocarlo en un archivo separado que lea el archivo .py.
KHibma
2

En ArcGIS for Server 10.1+ puede usar el Kit de herramientas de administración de ArcGIS Server - 10.1+

De la descripción (negrita es mía):

ArcGIS Server Administration Toolkit le proporciona las herramientas y los scripts para ayudarlo a administrar su ArcGIS Server. Estas herramientas no se han escrito en Python y se conectan al administrador REST de un servidor ArcGIS que le permite realizar rápida y fácilmente algunas funciones administrativas comunes, que incluyen: - Elemento de lista

  • Detener, iniciar o eliminar un servicio
  • Renombrar un servicio
  • Modificar el nivel de registro y borrar registros antiguos
  • Subir y registrar un SOE
  • Crear una clase de entidad desde las ubicaciones en las que se vio un servicio de mapas (inspeccionando los registros)
  • Definiciones de servicio de publicación (.SD)

Las herramientas dentro de este kit se presentan de tres formas principales: Herramientas, Código y ejecutable independiente.

ericchiasson
fuente