Hola a todos

        Otra forma ser�a controlar si existe un trabajo con un nombre determinado
ejecutandose en el sistema. Si el trabajo a controlar siempre tiene el mismo
nombre se puede hacer un control sobre el.

        Adjunto envio el fuente de un programa que monitoriza si se esta ejecutando
otro proceso y en caso contrario lo lanza. El proceo pueder a la inversa, es
decir, si esta funcionando que no se pueda lanzar mas veces.

        Un saludo

        Fernando Martinez


-----Mensaje original-----
De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] nombre de Jesus
Busquets/NOTES/ES
Enviado el: lunes, 24 de febrero de 2003 12:41
Para: [EMAIL PROTECTED]
Asunto: RE: IF ACTIVE .....





Lo que pasa con este sistema es que se puede, efectivamente, llamar al
programa desde fuera, y est� permitido..
pero si el programa mismo que se ejecuta se bloquea a s� mismo en modo
exclusivo, no puede ser llamado por nadie m�s hasta que acaba, y adem�s, si
finaliza con error da igual, al acabar el trabajo se desbloquea (en el caso
en que estemos hablando de procesos batch, claro)

He aqu� un microprograma que sirve para probar esto (bueno, ya se que
parece m�s un "programa del viernes", pero cumple su cometido.)

El programa se llama TSTBLQ y est� en una biblioteca el *LIBL

PGM   /* Para probar el funcionamiento de bloqueos del mismo programa */
             ALCOBJ     OBJ((TSTBLQ *PGM *EXCL)) WAIT(5)
             MONMSG     MSGID(CPF1002) EXEC(GOTO BLOQUEO)

             SNDPGMMSG  MSG('Acabo de bloquearme') TOPGMQ(*EXT)


             DLYJOB     DLY(60) /* Hacemos como que estamos haciendo
algo...*/
             SNDPGMMSG  MSG('Bueno, ya he trabajado bastante, y me +

                          largo') TOPGMQ(*EXT)
             GOTO FIN

BLOQUEO:
             SNDPGMMSG  MSG('�Ah, pill�n, conque quer�as entrar +

                          varias veces, eh?!') TOPGMQ(*EXT)

FIN:         DLCOBJ OBJ((TSTBLQ *PGM *EXCL))
    ENDPGM


Un saludo
Jesus Busquets
Grespania, S.A.



Please respond to [EMAIL PROTECTED]

Sent by:        [EMAIL PROTECTED]

To:        "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>
cc:

Subject:        RE: IF ACTIVE .....


Abundando en la soluci�n de alocar/desalocar aqu� tienes un CL que submite
un objeto una sola vez (se debe ejecutar siempre el programa desde aqu�, en
caso contrario puedes tener m�s de una instancia del programa ejecurtandose
simult�neamente)


*************** Beginning of data *************************************
            PGM        PARM(&NAMELIB &NAMEPGM)
            DCL        VAR(&NAMEPGM) TYPE(*CHAR) LEN(10) /* Name of +
                         the program to execute */
            DCL        VAR(&NAMELIB) TYPE(*CHAR) LEN(10) /* Name of +
                         the library of the program */
            DCL        VAR(&LIBPGM) TYPE(*CHAR) LEN(21) /* Name of +
                         the library + the program */
            CHGVAR     VAR(&LIBPGM) VALUE(&NAMELIB *TCAT '/' *TCAT +
                         &NAMEPGM) /* Concatenate lib + pgm */
            ALCOBJ     OBJ((&NAMELIB/&NAMEPGM *PGM *EXCL)) WAIT(0) +
                         /* First of all we try to allocate the +
                         program */
            MONMSG     MSGID(CPF1002 CPF0952 CPF0939 CPA0701 +
                         CPF1085 CPF0001) EXEC(GOTO +
                         CMDLBL(THATSALL)) /* The allocate Fails +
                         -> The program is running -> That's all +
                         folks */
            DLCOBJ     OBJ((&NAMELIB/&NAMEPGM *PGM *EXCL)) /* The +
                         allocate success, so des-allocate */
            SBMJOB     CMD(CALL PGM(&NAMELIB/&NAMEPGM)) +
                         JOB(&NAMEPGM) JOBQ(QNECK) LOG(0 30 +
                         *NOLIST) LOGCLPGM(*NO) INQMSGRPY(*RQD) +
                         MSGQ(*NONE) /* The program is not running +
                         and the program is des-allocated, now you +
                         can run the program. THE FIRST +
                         INSTRUCTION OF THE PROGRAM MUST BE +
                         'ALCOBJ MYSELF *PGM *EXCL'*/
            MONMSG     MSGID(CPD0028 CPD0170) EXEC(GOTO +
                         CMDLBL(THATSALL)) /* The Program is not +
                         in the disk -> That's all folks */
THATSALL:   ENDPGM
****************** End of data ****************************************

 No es necesario desalocar el objeto al salir pues se desaloca el solo.

 Este CL ha funcionado durante bastante tiempo sin ning�n problema.

 Saludos. Tono

-----Original Message-----
From: Juan Ram�n Garcia [mailto:[EMAIL PROTECTED]
Sent: lunes 24 de febrero de 2003 10:11
To: [EMAIL PROTECTED]
Subject: RE: IF ACTIVE .....


Hola, en el siguiente enlace tienes un art�culo sobre este tema
http://www.recursos-as400.com/wrk400/150999/maquinista.shtml

Un saludo.
Juanra

----- Original Message -----
From: j_losada losada <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, February 22, 2003 2:34 AM
Subject: IF ACTIVE .....


> Buenas noches foro,
>
> tal vez alguno de la vieja escuela (sist. 36) me pueda ayudar en el
AS/400,
> necesito hacer una CL que haga en si lo que en RPG II se controlaba con
un
> IF ACTIVE.
> Es decir, tengo un trabajo (ej.: AAAA) que ha de estar permanente activo,
en
> caso de que falle por alguna causa se ha de arrancar automaticamente con
un
> mandato (ej.: XXXX)
> Esto en RPG II sobre sist. 36 se podia controlar con un procedimiento del
> tipo:
>
> INICIO TAG
> IF ACTIVE AAAA GOTO FIN
> XXXX
> FIN TAG
> GOTO INICIO
>
> Mas o menos,... no se si me explico, pues bien, como lo hariais con una
CL?
>
> Gracias a todos



_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]

_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]




_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]
/* ----------------------------------------------------------------- */
/*                                                                   */
/* TR007C: Controla que se este ejecutando el monitor de             */
/*         la cola de datos.                                         */
/*                                                                   */
/* ----------------------------------------------------------------- */
PGM    Parm(&DELAY)

             DCL        VAR(&Delay)    TYPE(*Dec)  LEN(15 5)
             DCL        VAR(&JobN)     TYPE(*Char) LEN(10) Value('RTVDTQ_CLP')
             DCL        VAR(&JobName)  TYPE(*Char) LEN(26)
             DCL        VAR(&JobUser)  TYPE(*Char) LEN(10)
             DCL        VAR(&JobNbr)   TYPE(*Char) LEN(6)  Value(*ALL)

             DCL        VAR(&UsrSpcN)  TYPE(*Char) LEN(10) Value('DTAQ')
             DCL        VAR(&UsrSpcL)  TYPE(*Char) LEN(10) Value('QTEMP')
             Dcl        Var(&UsrSpc)   Type(*Char) Len(20) +
                                       Value('DTAQ      QTEMP     ')
             Dcl        Var(&Attr)     Type(*Char) Len(10) Value('DTAQ')
             Dcl        Var(&IniVal)   Type(*Char) Len(1)  Value(' ')
             Dcl        Var(&Auth)     Type(*Char) Len(10) Value('*LIBCRTAUT')
             Dcl        Var(&Text)     Type(*Char) Len(50) +
                                       Value('Monitor Colas de Datos.')
             Dcl        Var(&JobL0100) Type(*Char) Len(8)  Value('JOBL0100')
             Dcl        Var(&Status)   Type(*Char) Len(10) Value('*ACTIVE')
             Dcl        Var(&Bin4)     Type(*Char) Len(4)
             Dcl        Var(&NbrJobd)  Type(*Dec)  Len(8)
             Dcl        Var(&NbrJobN)  Type(*Char) Len(15)

             RtvJobA    User(&JobUser)
             ChgVar     Var(&JobName)  +
                        Value(&JobN *Cat +
                              &JobUser *Cat &JobNbr)

             Chkobj     Obj(&UsrSpcL/&UsrSpcN) ObjType(*USRSPC)
             MonMsg     MsgID(CPF9801) Exec(Do)
                  Call    Pgm(QUSCRTUS)   Parm(&UsrSpc     +
                                               &Attr       +
                                               X'00000100' +
                                               &IniVal     +
                                               &Auth       +
                                               &Text)
             EndDo


Bucle:       Call    Pgm(QUSLJOB)    Parm(&UsrSpc     +
                                          &JOBL0100   +
                                          &JobName    +
                                          &Status)

             Call    Pgm(QUSRTVUS)   Parm(&UsrSpc     +
                                          X'00000085' +
                                          X'00000004' +
                                          &Bin4)

             ChgVar     Var(&NbrJobD) Value(%Binary(&Bin4))

             ChgVar     Var(&NbrJobN) Value(&nbrjobd)

             If         Cond(&NbrJobD *EQ 0) Then(Do)
                  SbmJob     Cmd(Call Pgm(RtvDtaQC)) Job(&JobN) +
                                    JobD(&JobN) User(*JobD)
             EndDo

             DlyJob     Dly(&Delay)
             Goto       CmdLbl(Bucle)
End:
             EndPgm

Responder a