[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    309

    prüfen ob Job schon läuft

    guten morgen *all

    kennt jemand eine Möglichkeit, zu prüfen, ob ein bestimmter Job schon läuft!

    Erklärung:
    ich habe ein Programm (sagen wir mal PgmA), welches von einem anderen Pgm. an die JobQ "QBATCH" übergeben wird.
    Hier kommt es vor, dass in dieser OutQ schon andere Job's (die nicht's mit diesem zu tun haben => "FIFO") stehen, bzw. noch laufen.
    Es kann jetzt sein, dass genau dieses PgmA noch mal an eine andere JobQ z.B. "QBACHT2"übergeben wird.

    meine Frage:
    ist es möglich zu Beginn dieses Pgm's zu prüfen (API, CMD, etc.), ob schon ein PgmA läuft?

  2. #2
    Registriert seit
    Mar 2005
    Beiträge
    74
    Über die API QUSRJOBI lässt sich das ermitteln.

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... das ist beides nicht Wasserdicht (da könnten 2 gerade am prüfen sein und legen dann beide los). Sowas regelt man über Sperrobjekte oder Satzsperren in einer Datenbank, man holt sich dann als erstes eine Sperre, die dann bei Jobende verschwindet, oder vorher freigegeben werden kann.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Was aber das Problem nicht löst, wenn der 1. Job in der JOBQ noch wartet.
    Hier könnte der Job sich selber prüfen.
    Sobald die von Dieter erwähnte Sperre aktiv ist, kann der 2. Job sich ja sofort wieder beenden, wenn eine gleichzeitige Verarbeitung nicht erlaubt ist.
    So wird zwar ggf. zuviel submitted, aber was macht das schon.
    Laufen die Jobs nämlich hintereinander, merkt's sowieso keiner.
    Doppelte Verarbeitung verhindert man ggf. über Satzflags oder Existenzprüfung des Ergebnisses.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... die aber nicht zum prüfen gegen doppelte Ausführung herangezogen werden dürfen, da sie erst bei erfolgreichem Ende gesetzt werden dürfen, sonst verhungert der ganze Kram, wenn ein Job abbricht.

    D*B

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Doppelte Verarbeitung verhindert man ggf. über Satzflags oder Existenzprüfung des Ergebnisses.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    309
    mit diesem Programm PgmA werden bestimmte Daten per FTP an einen externen FTP-Server übertragen.

    Mein Problem ist hier:
    die FTP-Befehle schreibe ich in ein und die selbe Datenbank!

    es kommt jetzt von Zeit zu Zeit vor, dass, falls der Job in "QBATCH" noch steht und der Job in "QBATCH2" schon läuft, die Daten in der FTP-Protokolldatei für den Job in "QBATCH" nicht mehr stimmen. :-(

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Dann würde ich die Scriptdatei in die QTEMP kopieren, per OVRDBF auf die QTEMP verweisen und dann den FTP starten.
    Dann benötigst du keine Sperren, es sei denn, es soll die selbe Datei übertragen werden.

    Alternativ kannst du auch eine FTP-JOBQUEUE anlegen, einem Subsystem zuweisen und per JOBD ansteuern um sicherzustellen, dass die FTP-Jobs nur nacheinander laufen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    309
    Jobs in JobQ und QTEMP funktioniert das?

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Diese Frage verstehe ich nun gar nicht.
    Was hat eine JOBQ mit QTEMP zu tun ?

    Du erstellst eine JOBQ mit CRTJOBQ.
    Per ADDJOBQE ordnest du diese einem Subsystem zu.
    Per CRTJOBD erstellst du eine JOBD, die du wiederum obiger JOBQ zuordnest.

    Beim SBMJOB für deine FTP's gibst du dann diese JOBD mit.

    Die QTEMP betrifft nur deine STDIN/STDOUT für den FTP.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    309
    sorry,

    hast natürlich recht.
    vergiss die letzte Frage von mir einfach
    (war wohl mit meinen Gedanken mom. wo anders) :-(

  12. #12
    Registriert seit
    Apr 2010
    Beiträge
    11

    Api qwcrjbst

    Das geht mit dem API qwcrjbst
    :
    Code:
    pgm /* Display Job Status */
    
    copyright text('(C) Copyright APL Services 2010-05-28')
    
    dcl &brk        *char 001
    dcl &ds         *char 060
    dcl &dslen      *int  004 60
    dcl &hexnull4   *char 004 x'00000000'
    dcl &job        *char 010
    dcl &jobq       *char 010
    dcl &jobqlib    *char 010
    dcl &jobsts     *char 010
    dcl &msgdta     *char 256
    dcl &msgf       *char 010
    dcl &msgflib    *char 010
    dcl &msgid      *char 007
    dcl &nbr        *char 006
    dcl &qualjobnam *char 026
    dcl &qusbavl    *char 004 x'00000000'
    dcl &qusbprv    *char 004 x'0000003C'
    dcl &qusec      *char 004 x'00000000'
    dcl &sndmsg     *lgl  value('0')
    dcl &user       *char 010
    
    rtvjoba user(&user)
    chkobj qgpl/&user *dtaara
    monmsg CPF9801 exec(do)
      crtdtaara dtaara(qgpl/&user) type(*lgl) value('0') aut(*all)
    enddo
    chgdtaara qgpl/&user value('0')
    
    sbmjob cmd(call pgm(dspjobtstc)) job(dspjobsts) jobq(&user) hold(*yes)
    rcvmsg msgtype(*last) rmv(*yes) msgdta(&msgdta) msgid(&msgid) +
           msgf(&msgf) msgflib(&msgflib)
    chgvar &brk ' '
    if cond(&msgid = 'CPC1221') then(do)
      chgvar &job &msgdta
      chgvar &nbr %sst(&msgdta 21 6)
      chgvar &jobq %sst(&msgdta 27 10)
      chgvar &jobqlib %sst(&msgdta 37 10)
      chgvar &qualjobnam (&job *cat &user *cat &nbr)
      call qwcrjbst parm(&ds &dslen &qualjobnam 'JOBS0300' &qusec)
      chgvar &jobsts %sst(&ds 9 10)
      chgvar &brk ' '
      rlsjob job(&nbr/&user/&job)
      chgvar &qusbavl x'00000000'
      dlyjob dly(10)
      call qwcrjbst parm(&ds &dslen &qualjobnam 'JOBS0300' &qusec)
      chgvar &jobsts %sst(&ds 9 10)
      chgvar &brk ' '
      chgdtaara dtaara(qgpl/&user) value('1')
      dlyjob dly(10)
      chgvar &qusbavl x'00000000'
      call qwcrjbst parm(&ds &dslen &qualjobnam 'JOBS0300' &qusec)
      chgvar &jobsts %sst(&ds 9 10)
      chgvar &brk ' '
    enddo
    
    end:
    if cond(&sndmsg) then(do)
      sndpgmmsg msgid(&msgid) msgf(&msgflib/&msgf) msgdta(&msgdta)
    enddo
    return
    endpgm
    Code:
    pgm
    
    copyright text('(C) Copyright APL Services 2010-05-31')
    
    dcl &end        *lgl
    dcl &user       *char 010
    
    rtvjoba user(&user)
    
    dountil cond(&end)
      rtvdtaara dtaara(qgpl/&user) rtnvar(&end)
    enddo
    
    end:
    endpgm

Similar Threads

  1. Prüfen, ob PROGRAMM in Benutzung ist
    By JIM in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 28-10-09, 10:01
  2. Prüfen, ob es für einen Job bereits Spools gibt.
    By hwalk in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 09-02-09, 18:42
  3. Prüfen ob DataQ gelesen wird
    By jc_denton in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 26-09-08, 15:42
  4. auf aktiven Job prüfen
    By TARASIK in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-10-06, 12:07
  5. TCP/IP FTP prüfen ob Rechner an ist
    By malzusrex in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-07-02, 11:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •