Iniciando e parando os serviços de mapa do ArcGIS Server usando Python?

10

É possível parar programaticamente e iniciar os serviços de mapa do ArcGIS Server usando Python?

Jeff Berry
fonte
Esta é apenas uma consulta REST.
Vince
Obrigado. Mas preciso escrever login e senha no meu script .py, alguma idéia de como evitar isso. Por exemplo, posso usar o arquivo .ags?)
Lora
Infelizmente não; eles deixaram um grande buraco no design quando falharam em fornecer uma função para converter um .agsarquivo em um token. Você pode tentar conectar-se a um certificado (arquivo PEM), embora isso exija mais do que simples HTTP baunilha.
Vince

Respostas:

7

No ArcGIS 10.0, para serviços individuais, como você pode fazer a linha de comando para manter o ArcIMS, existe uma ferramenta de linha de comando que pode ser baixada da Code Gallery ( AGSSOM ) que fornece o núcleo das principais áreas, mas não há serviço granular específico 'controle de nível que você pode usar neste momento para iniciar / parar / atualizar / adicionar / remover serviços AGS.

Existem no ideas.arcgis.com vários locais com solicitações para melhorar o controle dos serviços a partir de um local mais automatizável.

DEWright
fonte
O link para o ArcGIS Ideas está quebrado. De qualquer forma, talvez essa resposta possa ser atualizada para 10.7.
PolyGeo
12

Para aqueles que usam o ArcGIS 10.0 e estão interessados ​​em usar o AGSSOM, conforme recomendado por DE Wright, reunimos o código a seguir. Isso interromperá todos os serviços, permitindo que você execute as tarefas necessárias do banco de dados geográficos e, em seguida, reinicie os serviços em execução anteriores.

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
fonte
4

A partir do ArcGIS Server 10.3, vários utilitários de linha de comando baseados em Python vêm com o servidor ArcGIS.

Pela documentação da esri, eles geralmente são instalados aqui:

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

O utilitário de serviço de gerenciamento é ótimo para iniciar, parar ou excluir serviços:

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

Charlie Hofmann
fonte
3

Na mesma linha que Jeff Berry postou em sua resposta, escrevi uma pequena função que gerenciará os serviços de mapa do ArcGIS Server 10.0 usando as ferramentas AGSSOM.

No meu caso, chamo os serviços individualmente por nome, parando e iniciando um de cada 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()

Em seguida, você pode chamar um serviço pelo nome usando -x para parar e -s para iniciar:

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

Para o ArcGIS 10.7, e algumas versões anteriores, um conjunto completo de scripts python para parar, iniciar, excluir e várias outras coisas podem ser encontradas aqui: http://www.arcgis.com/home/item.html?id= 12dde73e0e784e47818162b4d41ee340 (também existe um .exe dentro deste, se você precisar absolutamente de um executável completo)

Ou mergulhe na ajuda e leia sobre as muitas opções (fora da caixa de linha de comando, API python, trechos de código) aqui: https://enterprise.arcgis.com/en/server/latest/administer/linux/scripting-arcgis -server-Administration.htm

No entanto, todos esses pontos estão incluídos como outras respostas na pergunta que você fez referência. AGSSOM era um utilitário .net criado para o servidor 10.0 e mais antigo. Houve uma versão 10.1 e mais recente produzida, mas nunca ganhou popularidade, pois você não precisava de um código c # / vb pesado para interagir com o servidor. O servidor 10.1+ foi lançado com uma API REST bem estruturada, permitindo que linguagens de alto nível, como Python, e, portanto, um público mais amplo criem e administrem o script sem a necessidade do utilitário pesado agssom.exe.

KHibma
fonte
Mas preciso escrever login e senha no meu script .py, alguma idéia de como evitar isso. Por exemplo, posso usar o arquivo .ags?)
Lora
Você não pode usar o arquivo .ags como um mecanismo para parar / iniciar serviços. A senha precisa ser salva em um arquivo, em algum lugar. Se é o próprio arquivo .py ou se você deseja colocá-lo em um arquivo separado que o arquivo .py lê.
KHibma
2

No ArcGIS for Server 10.1+, você pode usar o ArcGIS Server Administration Toolkit - 10.1+

A partir da descrição (negrito é meu):

O ArcGIS Server Administration Toolkit fornece as ferramentas e scripts para ajudá-lo a administrar o ArcGIS Server. Essas ferramentas foram escritas em Python e conectam-se ao administrador REST de um servidor ArcGIS, permitindo que você execute rápida e facilmente algumas funções administrativas comuns, incluindo: - Item da lista

  • Parando, iniciando ou excluindo um serviço
  • Renomeando um serviço
  • Modificando o nível do log e limpando logs antigos
  • Carregar e registrar um SOE
  • Criando uma classe de característica a partir dos locais em que um serviço de mapa foi visualizado (inspecionando os logs)
  • Definições de serviço de publicação (.SD)

As ferramentas contidas neste kit são apresentadas de três maneiras principais: Ferramentas, Código e executável independente.

ericchiasson
fonte