Batchlauf einrichten

Information
  • In PLANTA project wird bei der Einrichtung eines Batch-Jobs mit dem sogenannten Headless-Client gearbeitet.

Schritt 1: Einrichtung eines Benutzers in PLANTA project

Vorgehensweise

Schritt 2: Erstellung/Einrichtung eines Makros mit der gewünschten Funktionalität

Vorgehensweise
  • Im Modul-Customizer ein neues Modul anlegen und die Modul ID "merken". Dieses Modul kann für den Batch-Benutzer als Startup-Makro definiert werden, das bei jeder Anmeldung dieses Benutzers ausgeführt wird. Tut man das nicht, muss man dem Start-Skript des Headless-Clients im Parameter PLANTA_MODULE (siehe hier) die Modul-ID übergeben.
    • Das Modul mit einem entsprechenden Python-Makro gemäß dem gewünschten Einsatzzweck versorgen.
Beispiel
  • Es soll eine Neuplanung als Batch ausgeführt werden. Dabei soll eine Log-Datei mit Namens-Format JJJJ-MM-TT_hh-mm-ss_User.log mitgeschrieben werden, in der die Arbeitsschritte protokolliert sind.
  • Dafür im erstellten Modul das folgende Python-Makro einbauen:
from ppms import ppms_cu
import time

log_file = open('{0}_{1}.log'.format(time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime()), ppms.uvar_get('@1')), 'w')

def write_log_entry(msg):
    log_file.write(msg + '\n')
    log_file.flush()

mod_obj = ppms.get_target_module()

write_log_entry('Start Neuplanung')

new_planing_module=ppms_cu.Helper.get_global_setting("new_planing_module").alpha120.get_value()
exec_tcalc=ppms_cu.Helper.get_global_setting("exec_tcalc").alpha120.get_value()
target_mod_obj=mod_obj.open_module(new_planing_module)
target_mod_obj.open_module(exec_tcalc)
target_mod_obj.menu(49)

write_log_entry('Ende Neuplanung')

log_file.close() 

Schritt 3: Manueller Start des Headless-Clients zur Erzeugung der Passwort-Datei

Vorgehensweise
  • Aufruf-Template (dieser Befehl sowie seine folgenden Beispiele sind einzeilig und werden nur aus Gründen der Lesbarkeit ggf. umgebrochen):
<Python-Interpreter> <Headless-Pfad>planta_headless.py --service=<Server>:<Port> --user=<BATCH-User> --auth_type=challenge --secret=<PW-Datei>

Parameter Beschreibung Beispiel Windows Beispiel Linux
<Python-Interpreter> Aufruf des jew. Python-Interpreters C:\Python27\python.exe /usr/local/bin/python2.7
<Headless-Pfad> Verzeichnispfad des Headless-Clients, absolut:
oder relativ zum aktuellen Verzeichnis:
C:\PLANTA\Jobs\Headless\
.\
/planta/jobs/headless/
./
<Server> Name oder IP-Adresse des PLANTA Servers localhost (wenn Ausführung auf Applikationsserver)
planta4711.planta.de
10.210.47.11
<Port> Verbindungsport zum Service Standard ist 21000 + Systemnr., z.B. 21001
<BATCH-User> Name des PLANTA project Batch Benutzers BATCH
<PW-Datei> Pfad u. Name der zu erzeugenden Passwort-Datei .\auth_file ./auth_file

Beispiel Windows

C:\Python27\python.exe C:\PLANTA\Jobs\Headless\planta_headless.py --service=planta4711:21001 --user=BATCH --auth_type=challenge --secret=C:\PLANTA\Jobs\Headless\auth_file

Beispiel Linux

/usr/local/bin/python2.7 ./planta_headless.py --service=localhost:21210 --user=BATCH --auth_type=challenge --secret=./auth_file

  • Passworteingabe (Passwort wird in einer verschlüsselter Datei abgelegt)
  • Einrichten der Rechte für die neu erstellte verschlüsselte Passwort-Datei (Schreib-/Leserechte ausschließlich für den Ausführenden des Python-Programms)

Schritt 4: Einrichtung des Jobs

Vorgehensweise
  • Hierfür die folgenden Shell-/Batch-Skript Templates anpassen
    • Windows
      • Beim folgenden Skript im Abschnitt Parameter anpassen: die passenden Werte eintragen, anschließend als Datei (z.B. namens Headless.bat) im Headless-Cient-Verzeichnis abspeichern (der Datums-Zeitstempel ist hier abhängig vom lokalen Format und muss ggf. angepasst werden):
@ECHO OFF
REM BATCH
REM PLANTA Headless-Client: Durchführung von Batch-Jobs
REM Parameter anpassen:
REM --->
SET PYTHON="<Pfad zu Python (V. 2.6 oder 2.7)>"
SET HEADLESS_DIR="<Pfad zum Headless Client (PLANTA_PY)>"
SET SERVICE=<Serveradresse:Portnummer>
SET USER=BATCH
REM Falls das Arbeitspaket als Startmodul des Batch-Users definiert ist, bleibt dieser Parameter leer,
REM sonst wird hier die Modul-ID des auszuführenden Moduls eingetragen:
SET PLANTA_MODULE=
REM Falls Logging gewünscht ist, die folgenden Variablen aktivieren,
REM sowie unten den Skript-Aufruf mit Logging aktivieren und den ohne Logging deaktivieren:
REM SET LOG_DIR="<Pfad des Log-Verzeichnisses"
REM SET LOGFILE="<Präfix für die Log-Datei (z.B. PLANTA_Headless)>"
REM SET DATETIME=%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
REM <---
SET AUTH_FILE=".\auth_file"
SET PLANTA_PY=".\planta_headless.py"
SET PLANTA_SH=%PLANTA_PY% --service=%SERVICE% --user=%USER% --auth_type=challenge --secret=%AUTH_FILE% --module=%PLANTA_MODULE%
cd %HEADLESS_DIR%
REM Variante ohne Logging:
%PYTHON% %PLANTA_SH% %*
REM Variante mit Logging:
REM forfiles -p %LOG_DIR% -m %LOGFILE%*.log -d -7 -c "cmd /c del @path"
REM %PYTHON% %PLANTA_SH% %* --timeout=-1 -vvv >> %LOG_DIR%\%LOGFILE%_%DATETIME%_%USER%.log

    • Linux
      • Beim folgenden Skript im Abschnitt Parameter anpassen: die passenden Werte eintragen, anschließend als Datei (z.B. namens headless.bsh) im Headless-Client-Verzeichnis abspeichern:
#!/bin/bash
# PLANTA Headless-Client: Durchführung von Batch-Jobs
# Parameter anpassen:
# --->
PYTHON="<Pfad zu Python (V. 2.6 oder 2.7)>"
HEADLESS_DIR="<Pfad zum Headless Client (PLANTA_PY)>"
SERVICE="<Serveradresse:Portnr.>"
USER="BATCH"
# Falls das Arbeitspaket als Startmodul des Batch-Users definiert ist, bleibt der folgende Parameter leer,
# sonst wird hier die Modul-ID des auszuführenden Moduls eingetragen:
PLANTA_MODULE=""
# Falls Logging gewünscht ist, die folgenden Variablen aktivieren, 
# sowie unten den Skript-Aufruf mit Logging aktivieren und den ohne Logging deaktivieren:
#LOG_DIR="<Pfad des Log-Verzeichnisses"
#LOGFILE="<Präfix für den Log-Datei-Namen (z.B. PLANTA_Headless)>"
#DATETIME=`date +20%y-%m-%d_%H-%M-%S`
# <---
AUTH_FILE="./auth_file"
PLANTA_PY="planta_headless.py"
PLANTA_SH="./$PLANTA_PY --service=$SERVICE --user=$USER --auth_type=challenge --secret=$AUTH_FILE --module=$PLANTA_MODULE"
cd $HEADLESS_DIR
# Variante ohne Logging:
$PYTHON $PLANTA_SH $*
# Variante mit Logging:
#find $LOG_DIR -type f -name "$LOGFILE*.log" -mtime +7 -print0 | xargs -0 rm -f
#$PYTHON $PLANTA_SH $* --timeout=-1 -vvv >> $LOG_DIR/$LOGFILE\_$DATETIME\_$USER.log

Schritt 5: Einrichtung des zeitgesteuerten Aufrufs

  • Hier sind administrative Rechte erforderlich
    • Einrichtung unter Windows - mit dem Task Manager (bzw. Aufgabenplanung)
    • Einrichtung unter Linux - als Cron Job
    • In beiden Fällen weiß der Job nichts von Umgebungsvariablen etc. Alles was er wissen muss, muss in den Shell-Skripten mitgegeben werden (z.B. absolute Pfade verwenden).

Hinweis

  • Der Headless-Client setzt die Batch-Jobs ab, ohne auf deren Beendigung zu warten. Dies kann durch den Parameter timeout -1 verhindert werden (in diesem Fall wartet der Headless-Client auf die Beendigung der Jobs), siehe auch die Logging-Variante in den oben aufgeführten Shell-Skripten.

         PLANTA project









 
  • Suche in Topic-Namen

  • Suche in Topic-Inhalten
This site is powered by the TWiki collaboration platform Powered by Perl