![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: Hello, Please so kind and provide some hints how to avoid a double (or more) run of a batch job in the same queue. Especial during submitting => some DCL code will detect all entries if the job and deletes it then a new entry will be created Such as... $ sho queue/batch/all sys_batch Batch queue SYS_BATCH, available, on TAMDHU:: Entry Jobname Username Status ----- ------- -------- ------ 812 TEST_Q SYSDAVO Executing 813 TEST_Q SYSDAVO Executing 784 IKEA_ACCOUNTING_ZIP SYSTEM Holding until 1-AUG-2002 00:05:00 807 TEST_TST_1 SYSDAVO Holding 808 TEST_Q SYSDAVO Holding 809 TEST_Q SYSDAVO Holding 810 TEST_Q SYSDAVO Holding 811 TEST_Q SYSDAVO Holding Here are my unsucessful attempt: $!----------------------------------------------------------------------------- $! $ queue := SYS_BATCH ! Queue to look in $ job := TEST_Q ! Job name to look for $ temp = F$GETQUI("CANCEL_OPERATION") ! Clear context $! $ SHOW QUEUE/ALL 'queue' $! $ get_context = F$GETQUI("DISPLAY_QUEUE",,queue,"WILDCARD") $! $NEXT_JOB: $ jname = F$GETQUI("DISPLAY_JOB","JOB_NAME",,"ALL_JOBS") $ IF jname .EQS. "" THEN GOTO NO_MORE_JOBS $ IF jname .NES. job THEN GOTO NEXT_JOB $!! jname = F$GETQUI("DISPLAY_JOB","JOB_NAME",,"FREEZE_CONTEXT") $ entry = F$GETQUI("DISPLAY_JOB","ENTRY_NUMBER",,"FREEZE_CONTEXT,ALL_JOBS") $ SHOW ENTRY/FULL 'entry' $! GOTO NEXT_JOB ! => ! %JBC-E-NOQUECTX, no queue context... $! $NO_MORE_JOBS: $!! IF F$MODE() .EQS. "INTERACTIVE" THEN GOTO RESCHEDULE $! $! $RESCHEDULE: $ SET VERIFY $ EXIT $!----------------------------------------------------------------------------- ------------------------------------------------ Investigations: The OpenVMS Wizard will assume this question is specific to the queue manager entries, and would recommend existing discussions of the f$getqui lexical including the following topics: (813), (1240), (2159), (3951), (4546), (4568), (4903), (5188), (5471), (5567), (5651), (5793), (5982), (6315), (6877), (6944), etc. Answer written or last revised on 11-JAN-2002 ------------------------------------------------ Suggestions: Please improve the example area of the F$GETQUI by presenting some more pratical oriented sample => such my question. In general the documentation is good but difficult to go through and it is NOT easy to see what needs a CONTEXT and what not etc. I appreciate your advice. Thanks a lot Regards Andreas The Answer is : Dedicate a single-slot batch queue to the application? Use the job restart capabilities, and don't resubmit? Use a job-scheduling package, either commercial or Freeware? Use a lock (eg: open a known file exclusively) to coordinate (ie prevent) parallel activity? Use the following? $ verify = 'f$verify(0) $!************************************************************************* $! $! FILE: IS_JOB_IN_BATCH.COM $! $! This command procedure will determine if a specified job is in the $! batch queue. The job is specified by the following parameters: $! $! P1 = The username of the job $! P2 = The name of the job $! P3 = The name of the batch queue to look in (optional) $! $! A global symbol JOB_IN_QUEUE is set to TRUE or FALSE to indicate if $! the job was found. If P1 or P2 are not specified then JOB_IN_QUEUE $! is set to the string "INVALID PARAMETERS". $! $! A global symbol JOB_ENTRY_NUMBER is set to the entry number of the $! job, if found. This symbol is set to blank otherwise. $! $! If a matching job is found, this procedure will exit with a $! success status. $! $!************************************************************************* $SS_NORMAL = 1 $SS_BADPARAM = 20 $SS_NOSUCHENTRY = 10156 + %X10000000 $! $! Get input Parameters $!----------------------- $username = p1 $jobname = p2 $batch_queue = P3 $! $! $JOB_ENTRY_NUMBER == "" $status = SS_NOSUCH_ENTRY $! $! Check for invalid parameters $!------------------------------ $if username .eqs. "" .or. jobname .eqs. "" $then $ job_in_queue == "INVALID PARAMETERS" $ status = SS_BADPARAM $ goto all_exit $endif $! $if batch_queue .eqs. "" then batch_queue = "*" $! $! $! Clear out the queue context $!----------------------------- $temp = f$getqui("cancel_operation") $! $! $job_flags = "batch,timed_release_jobs,all_jobs" $freeze_job_flags = "batch,timed_release_jobs,freeze_context,all_jobs" $! $! Search for the job $!----------------------- $queue_loop: $! $! Check each queue in sequence $!------------------------------ $ qname = f$getqui ("display_queue","queue_name",batch_queue,"wildcard") $ if qname .eqs. "" then goto queue_loop_end $job_loop: $! $! Check each job on the queue $!---------------------------------- $ noaccess = f$getqui("display_job","job_inaccessible",,job_flags) $ if noaccess .eqs. "TRUE" then goto job_loop $ if noaccess .eqs. "" then goto queue_loop $! $! Freeze the queue context to get job detail $!------------------------------------------------- $ jname = f$getqui("display_job","job_name",,freeze_job_flags) $ juser = f$getqui("display_job","username",,freeze_job_flags) $ jentry = f$getqui("display_job","entry_number",,freeze_job_flags) $ if jname .eqs. jobname $ then $ if (username .eqs. "*") .or. (juser .eqs. username) $ then $ goto job_found $ endif $ endif $ goto job_loop $! $queue_loop_end: $ job_in_queue == "FALSE" $ goto all_exit $! $job_found: $ job_in_queue == "TRUE" $ JOB_ENTRY_NUMBER == 'jentry' $ status = SS_NORMAL $! $! $all_exit: $ temp = f$getqui("cancel_operation") $ verify = f$verify(verify) $ exit 'status'
|