Avvio e arresto dei servizi di mappe di ArcGIS Server tramite Python?


10

È possibile arrestare e avviare a livello di codice i servizi di mappe del server ArcGIS utilizzando Python?


Questa è solo una query REST.
Vince

Grazie. Ma devo scrivere login e password nel mio script .py, ho idea di come evitarlo. Ad esempio, posso usare il file .ags?)
Lora

Sfortunatamente no; hanno lasciato un grosso buco nel design quando non sono riusciti a fornire una funzione per convertire un .agsfile in token. Potresti essere in grado di provare a connetterti con un certificato (file PEM), sebbene ciò richieda molto più di un semplice HTTP vaniglia.
Vince

Risposte:


7

In ArcGIS 10.0, per i singoli servizi, come ad esempio la riga di comando per mantenere ArcIMS, esiste uno strumento da riga di comando che è possibile scaricare dalla Galleria di codici ( AGSSOM ) che fornisce il nucleo delle aree principali ma non esiste un servizio granulare specifico "controllo di livello che è possibile utilizzare in questo momento per avviare / arrestare / aggiornare / aggiungere / rimuovere i servizi AGS.

Su ideas.arcgis.com sono presenti diversi luoghi con richieste per migliorare il controllo dei servizi da una posizione più automatizzabile.


Il collegamento ad ArcGIS Ideas è interrotto. In ogni caso, forse questa risposta può essere aggiornata alla 10.7.
PolyGeo

12

Per quelli che stanno usando ArcGIS 10.0 e interessati ad usare AGSSOM come raccomandato da DE Wright, ho messo insieme il seguente codice. Ciò interromperà tutti i servizi che consentono di eseguire le attività di geodatabase necessarie e quindi riavviare i servizi precedentemente in esecuzione.

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])

4

A partire da ArcGIS Server 10.3, diverse utility da riga di comando basate su Python vengono fornite in bundle con il server ArcGIS.

Per la documentazione di esri sono di solito installati qui:

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

L' utilità di gestione dei servizi è ottima per l'avvio, l'arresto o l'eliminazione dei servizi:

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


3

Analogamente a quanto pubblicato da Jeff Berry nella sua risposta, ho scritto una piccola funzione che gestirà i servizi cartografici ArcGIS Server 10.0 utilizzando gli strumenti AGSSOM.

Nel mio caso chiamo i servizi individualmente per nome, interrompendo e avviando uno alla volta.

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()

Quindi, puoi chiamare un servizio per nome usando -x per fermare e -s per iniziare:

manageMapServices("-s", "Folder/Service", "MapServer")

2

Per ArcGIS 10.7 e alcune versioni precedenti, un set completo di script Python per arrestare, avviare, eliminare e un sacco di altre cose può essere trovato qui: http://www.arcgis.com/home/item.html?id= 12dde73e0e784e47818162b4d41ee340 (c'è anche un .exe all'interno di questo se hai assolutamente bisogno di un eseguibile completo)

Oppure tuffati nella guida e leggi le molte opzioni (riga di comando out of the box, api python, frammenti di codice) qui: https://enterprise.arcgis.com/en/server/latest/administer/linux/scripting-arcgis -server-administration.htm

Tuttavia, tutti questi punti sono inclusi come altre risposte alla domanda a cui hai fatto riferimento. AGSSOM era un'utilità .net scritta per Server 10.0 e versioni precedenti. È stata prodotta una versione 10.1 e più recente, ma non ha mai guadagnato popolarità in quanto non era necessario un pesante codice c # / vb per l'interfaccia con il server. Il server 10.1+ è stato rilasciato con un'API REST ben strutturata, che consente linguaggi di alto livello, come Python, e quindi un pubblico più ampio di script e amministrarlo senza la necessità dell'utilità pesante agssom.exe.


Ma devo scrivere login e password nel mio script .py, ho idea di come evitarlo. Ad esempio, posso usare il file .ags?)
Lora

Non è possibile utilizzare il file .ags come meccanismo per arrestare / avviare i servizi. La password deve essere salvata in un file, da qualche parte. Se si tratta del file .py stesso o se si desidera inserirlo in un file separato che il file .py legge.
KHibma,

2

In ArcGIS per Server 10.1+ è possibile utilizzare ArcGIS Server Administration Toolkit - 10.1+

Dalla descrizione (il grassetto è mio):

ArcGIS Server Administration Toolkit fornisce gli strumenti e gli script che consentono di amministrare il server ArcGIS. Questi strumenti non sono stati scritti in Python e si collegano all'amministratore REST di un server ArcGIS che consente di eseguire rapidamente e facilmente alcune funzioni amministrative comuni, tra cui: - Voce di elenco

  • Arresto, avvio o eliminazione di un servizio
  • Rinominare un servizio
  • Modifica del livello di registro e cancellazione dei vecchi registri
  • Carica e registra un SOE
  • Creazione di una featureclass dalle posizioni in cui è stato visualizzato un servizio cartografico (ispezionando i registri)
  • Definizioni del servizio di pubblicazione (.SD)

Gli strumenti all'interno di questo kit sono presentati in tre modi principali: Strumenti, Codice ed eseguibile autonomo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.