Automic Workload Automation

Expand all | Collapse all

V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

  • 1.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Jul 13, 2016 07:56 AM
    Hallo Zusammen,

    wir nutzen die Funktion, falls wir für einen Jobplan mehr als eine Eingabedatei benötigen bzw. diese bestimmte Eigenschaften erfüllen muss. Läuft z.B. mit einem "find ...." einwandfei.

    Beispiel:
    : PSET    &result#   = ''
    : SET     &datumhnd# = PREP_PROCESS(&host#,"UNIXCMD","*","CMD=find &in_absolut# -name &inputpattern# -mmin +61",,"UC_LOGIN=UNIX_UC4")
    : PROCESS &datumhnd#
    : PSET    &result#   = GET_PROCESS_LINE(&datumhnd#)
    : ENDPROCESS
    : PRINT   'Ergebnis:&result#'
    : CLOSE_PROCESS &datumhnd#

    Und nun dachte ich mir, ersetze ich für einen anderen Fall mal den "find" durch einen "ls -lt &dateiname#".
    Das funktioniert nun leider nicht!

    Detail:
    EVNT.CLNG#BSL@FILEEXISTS (494735226)
          Allgemein
              Objektname    EVNT.CLNG#BSL@FILEEXISTS
              Version    0
              RunID    494735226
              Aktivierer    494736022
              Parent    494736022
              Benutzer    ******
              Aktivierung    13.07.2016 08:14:44
              Start    13.07.2016 08:14:44
              Ende    13.07.2016 08:14:52
              Laufzeit       0:00:08
              Status    FAULT_OTHER - Start nicht möglich. Sonstiger Fehler.
              Rückgabewert    0
              Letzte Meldung    U00010038 Laufzeitfehler: Datensequenz 'FILETRANSFER' konnte nicht erstellt werden. Status: '0000001820', Rückgabewert: '0000000000'.
              Event-ID    494736022
              Rollback ermöglichen    Nein

    1820 bedeutet: FAULT_OTHER Vorgängeraufgabe konnte wegen eines sonstigen Fehlers nicht gestartet werden.

    Hat da schon mal jemand ähnliche Erfahrungen gemacht? Ich hab weder in der Doku noch im Objekt "0000\ PREP_PROCESS\EVENT.UNIXCMD" Hinweise auf mögliche Einschränkungen gefunden.

    Vorab vielen Dank und viele Grüße aus Nürnberg
    Manfred






  • 2.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Jul 13, 2016 08:26 AM
    Ok, ich hab nochmal getestet und genau hingeschaut, somit kann ich mir die Frage nun selbst beantworten.

    Der ls funktioniert natürlich wie jedes andere Kommando auch. Nur dummerweise liefert der ls, wenn er nichts findet einen RC<>0, was dann zum Fehler bei UC4 führt. Somit ist der find für den PREP_PROCESS besser geeignet, weil dieser im Negativ-Fall nichts zurückliefert und man einfach die Ergebnis-Variable auf Erfolg/Mißerfolg abfragen kann. Beim ls gibts dagegen den Abbruch mit dem Zielführenden Fehlerhinweis B)

    Ich lass das jetzt hier trotzdem mal stehen, vielleicht hat ja jemand noch Anregungen dazu oder das Thema hilft anderen.

    Viele Grüße
    Manfred


  • 3.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Jul 21, 2016 07:39 AM
    Hi Manfred,

    was genau möchtest Du denn mit dem LS dann erreichen ? nur eine Fileliste ? Dafür könntest Du ja dann auch einfach nur
    prep_process_filename  nutzen.

    Viele Grüße
    Christian


  • 4.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Jul 21, 2016 08:23 AM
    Hi Christian,
    der ursprüngliche Plan war, da wir drei Dateien mit demselben Zeitstempel benötigen, das mit einem
    ls *zeitstempel* | wc -l
    abzufragen und dann das Ergebnis des PREP_PROCESS auf eben 3 abzufragen. Klappt leider nicht wunschgemäß, wenn gar keine Datei vorhanden ist.

    Wir haben jetzt eine pragmatische Lösung mit drei Abfragen, das funktioniert einwandfrei. Eleganter könnte man das sicher auch noch mit einem Skript auf dem Agent erledigen. Noch pfiffiger, Script generieren, übertragen und ausführen:) Der Phantasie sind da ja kaum Grenzen gesetzt.

    !Script:

    : PSET    &result#        = 'N'

    : SET     &datumhnd#    = PREP_PROCESS(&host#,"UNIXCMD","*","CMD=find &in_absolut# -name &inputpattern#",,"UC_LOGIN=UNIX_UC4")
    : PROCESS &datumhnd#
    : PSET    &result1#     = GET_PROCESS_LINE(&datumhnd#)
    : ENDPROCESS
    : PRINT   'Ergebnis1:&result1#'
    : CLOSE_PROCESS &datumhnd#

    : IF &result1# <> ''
    :   SET     &inputpattern2# = STR_SUB ( &inputpattern2#, "JJJJMM", &UDAT_JJJJMM# )
    :   SET     &datumhnd2#  = PREP_PROCESS(&host#,"UNIXCMD","*","CMD=find &in_absolut# -name &inputpattern2#",,"UC_LOGIN=UNIX_UC4")
    :   PROCESS &datumhnd2#
    :   PSET    &result2#   = GET_PROCESS_LINE(&datumhnd2#)
    :   ENDPROCESS
    :   PRINT   'Ergebnis2:&result2#'
    :   CLOSE_PROCESS &datumhnd2#
    :   IF &result2# <> ''
    :     SET     &inputpattern3# = STR_SUB ( &inputpattern3#, "JJJJMM", &UDAT_JJJJMM# )
    :     SET     &datumhnd3#  = PREP_PROCESS(&host#,"UNIXCMD","*","CMD=find &in_absolut# -name &inputpattern3#",,"UC_LOGIN=UNIX_UC4")
    :     PROCESS &datumhnd3#
    :     PSET    &result3#   = GET_PROCESS_LINE(&datumhnd3#)
    :     ENDPROCESS
    :     PRINT   'Ergebnis3:&result3#'
    :     CLOSE_PROCESS &datumhnd3#
    :     IF &result3# <> ''
    :       SET &result# = 'Y'
    :     ENDIF
    :   ENDIF
    : ENDIF

    : IF &result# = 'Y'
    :   SET &OBJECTTOSTART# = 'JOBP.CLNG#BSL@DOWNLOAD'
    :   INCLUDE JOBI.UC4#BASIS@START_IF_NOT_RUNNING
    :   PRINT 'Objekt wird gestartet.'
    : ELSE
    :   PRINT 'Objekt wird nicht gestartet.'
    : ENDIF

    Und eben stelle ich fest, dass der "ls *** | wc -l" eigentlich sogar funktionieren müsste:

    [uc4@uc4-1.integ /tmp]$ ls 1 2 3 | wc -l
    ls: 1: Datei oder Verzeichnis nicht gefunden
    ls: 2: Datei oder Verzeichnis nicht gefunden
    ls: 3: Datei oder Verzeichnis nicht gefunden
    0
    [uc4@uc4-1.integ /tmp]$ echo $?
    0
    [uc4@uc4-1.integ /tmp]$

    Ich hatte seinerzeit zum Test nur mit dem ls probiert. In pipe mit dem wc muss das funktionieren, weil Fehlercodes über eine pipe nicht transportiert werden und der wc geht ja immer gut. Ausnahme bash-option pipefail. Wieder was dazugelernt. Tja, man muss nur miteinander reden :)

    Sollte dann so funktionieren:

    :PSET &result# = 'N'

    :SET &datumhnd# = PREP_PROCESS(&host#,"UNIXCMD","*","CMD=ls &in_absolut#&inputpattern# | wc -l",,"UC_LOGIN=UNIX_UC4")
    :PROCESS &datumhnd#
    :PSET    &result#     = GET_PROCESS_LINE(&datumhnd#)
    :ENDPROCESS
    :PRINT   'Ergebnis:&result#'
    :CLOSE_PROCESS &datumhnd#

    :IF &result# = 3
    :  SET &OBJECTTOSTART# = 'JOBP.CLNG#BSL@DOWNLOAD'
    :  INCLUDE JOBI.UC4#BASIS@START_IF_NOT_RUNNING
    :  PRINT 'Objekt wird gestartet.'
    :ELSE
    :  PRINT 'Objekt wird nicht gestartet.'
    :ENDIF

    Ich probier das in Kürze mal auf dem System aus und bestätige das dann nochmal.

    Vielen Dank Christian, mit Deiner Frage hast Du mir nochmal eine sehr gute Denkanregung gegeben. Kommst Du eigentlich zum Stammtisch in München? Soll angeblich am 15.9. stattfinden. Ein Betriebskollege will da gerne hin und ich bin eh ein alter Münchner...

    Viele Grüße
    Manfred



  • 5.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Jul 27, 2016 05:07 AM
    Hi Manfred,
    ich verusche immer alles mit Automic JCL zu lösen, das ganze müsstest Du auch ganz einfach so hinbekommen.

    :set &count# = "0"
    :set &loop# = PREP_PROCESS_FILENAME("&$AGENT#","/verzeichnis/filename&$PHYS_DATE_YYYYMMDD#.endung","N","N","EVENTUELL_GLEICH_FILTER",,,"UC_LOGIN=&$LOGIN#")

    :process &loop#
    :  set &check# = GET_PROCESS_LINE(&loop#)
    :  set &count# = &count# +1
    :endprocess
    :close_process &loop#

    !dann dein if
    :if &count# = "3"
    :  ......
    :endif

    Dann sparst Du dir Dein unixcmd, aber ich glaube das ist Geschmackssache.

    Stammtisch, yep habe ich auch schon gehört, dass wieder einer sein soll. Ich bin da wenn er ist, dann sehen wir uns.

    Schönen Tag
    Christian


  • 6.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Aug 03, 2016 02:56 AM
    Hi Christian,
    den PREP_PROCESS_FILENAME habe ich zwar mal kurz gestreift, bin aber als klassischer Unix-Skripter dann doch beim normalen PREP_PROCESS hängen geblieben. Dein Beispiel ist aber schön übersichtlich und ich werde es bei nächster Gelegenheit nutzen, es erscheint mir tatsächlich als die elegantere Lösung. Vielen Dank dafür.

    Der Termin 15.9. für den Stammtisch ist wohl bestätigt, nur die Örtlichkeit steht noch nicht fest.

    Wünsche auch einen schönen Tag
    Manfred


  • 7.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Aug 03, 2016 03:02 AM
    Hi Manfred,
    ja teste es einfach mal, dann lass uns nochmal sehen ob es was bringt.

    Lacation ist wohl "Wirtshaus zum Osterwaldgarten Keferstraße 12 80802 München"
    Ich bin schon angemeldet :-)

    Schönen Tag
    Christian



  • 8.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Aug 04, 2016 08:22 AM
    Hi Christian,

    die Location ist bestätigt, Danke für die Info. Wir sind auch schon alle angemeldet.

    Tja, und eben wollte ich mal den PREP_PROCESS_FILENAME auf einem anderen System bei uns antesten und bin dabei sogleich auf einen Showstopper gestossen.
    Die zu prüfende Datei befindet sich hier auf einem Netzlaufwerk, welches wir immer zum Start verbinden und am Ende wieder trennen müssen. Da macht dann ein separates Skript auf dem Agent/Host wieder Sinn. Es lebe die Vielfalt :smile:

    Viele Grüße
    Manfred


  • 9.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Aug 11, 2016 01:36 PM
    Hi Manfred,
    was mir dazu noch einfällt. Für solchne Fälle nutze ich einen "zentralen" Windows -Agent auf dem wir derartige Sachen ausführen. Quasi ein Zentraler Knotenpunkt in die Windowswelt. D. h. alles was richtung Windows gehen soll läuft über diesen Server bzw. Agent. Dort kann ich ohne Probleme dann Laufwerke mounten, Skript ausführen, unmounten und alles wieder verlassen. Die meisten Sachen löse ich von dort aber gleich über NFS/NFC Freigaben (hoffe das passt so, bin kein Windows'ler) so dass ich die Verzeichnisse immer direkt (\\share\laufwerk\ordner\.....) ansprechen kann.
    Vielleicht hilft Dir das noch ein wenig.
    Schönen Abend
    Christian


  • 10.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Aug 12, 2016 01:27 AM
    Hi Christian,
    Danke für den Tip, so ähnlich haben wir das auch bei unserer "eigenen" UC4-Installation, wobei wir da auch nur ein System haben, was unter Win läuft. Bei einem weiteren Provider läuft alles unter Win und hier sind wir an die Provider-Policies gebunden, da krieg ich das leider nicht anders gebacken. Aber es passt ja soweit, wenn auch ein klein wenig umständlicher. Aus Win halte ich mich auch immer gerne raus, wenngleich ich bei dem Projekt nun das erste Mal DOS-CMD nutzen "durfte" :/ Aber dank Google und schon ein paar Tagen Skripterfahrung ging das erstaunlich gut und ich hab alles schön in Includes verpackt, sodass die Jobs recht übersichtlich sind.
    Noch schöne Grüße aus Nürnberg, ich mach mich heut Abend auf den Weg nach München, eine Woche Urlaub daheim. Umstellung vermutlich nicht nötig, hier regnets gerade...
    Manfred


  • 11.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Feb 17, 2017 07:57 AM
    ManfredMauermann
    ChristianBöck602421

    Wir hatten diese Woche genau das gleiche Problem - hier dürfte der Fehler in der EVENT.UNIXCMD im Mand 0 liegen.

    wenn das OS kommando RC > 0 liefert, wird das Eventfile (meiner Meinung nach fälschlicherweise) gelöscht

    => siehe hier
    https://community.automic.com/discussion/8844/prep-process-ends-up-in-a-no-such-file-or-directory-error-if-the-os-command-returns-rc-0-in-ux#latest



  • 12.  V11.2: File-Event - !Script - PREP_PROCESS - UNIXCMD

    Posted Feb 20, 2017 01:41 AM
    FrankMuffke : Ja, das beschreibt so ziemlich genau unsere Erfahrung bei dem Thema. Ich finde das auch mehr als "unglücklich", das im Fehlerfall das Eventfile gelöscht wird. Das ist ja dann auch der Grund, warum die Kiste abschmiert. Gut, könnte man ändern, eine vernünftige Standardlösung wäre natürlich wünschenswerter.