![]() |
Software > OpenVMS Systems > Ask the Wizard ![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: How can my COM file find out the name of the batch job that runs it? We have a standard error program, ABORT.COM, that is called when there is an error in processing. ABORT sends a VMS mail message and terminates all processing. All ABORT can say in it s mail message, though, is "Check log file." We don't know what the name of the log file is! We could have had a crash in GET_DATA.COM, or in DTC.COM, or in any number of programs that run ABORT. How can ABORT find out, if the chain of command is GET_D ATA.COM running GET_PRICES.COM running ABORT.COM, what the chain was, and that the log file is GET_DATA.LOG? The Answer is : Information about any batch job can be obtained using the lexical function F$GETQUI (or the corresponding system service SYS$GETQUI). In the specific case of the logfile, things can be a bit tricky. If the log file was explicitly specified with the /LOG qualifier when the job was submitted, then the QUI item LOG_SPECIFICATION will return its name. If however it was defaulted, the return value of LOG_SPECIFICATION will be blank. The default log file is in the SYS$LOGIN directory of the username under which the job was submitted using the same name as the job. Here is a sample procedure which returns some information about the currently executing job, along with some sample output: JOBINFO.COM $ clear = F$GETQUI("CANCEL_OPERATION",,,) $ entry = F$GETQUI("DISPLAY_JOB","ENTRY_NUMBER",,"THIS_JOB") $ job_parameter_p1 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_1",entry,"") $ job_parameter_p2 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_2",entry,"") $ job_parameter_p3 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_3",entry,"") $ job_parameter_p4 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_4",entry,"") $ job_parameter_p5 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_5",entry,"") $ job_parameter_p6 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_6",entry,"") $ job_parameter_p7 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_7",entry,"") $ job_parameter_p8 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_8",entry,"") $ job_name = F$GETQUI("DISPLAY_ENTRY","JOB_NAME",entry,"") $ job_logfile = F$GETQUI("DISPLAY_ENTRY","LOG_SPECIFICATION",entry,"") $ job_username = F$GETQUI("DISPLAY_ENTRY","USERNAME",entry,"WILDCARD") $ count=1 $ next_file: $ procedure_'count' = F$GETQUI("DISPLAY_FILE","FILE_SPECIFICATION",,) $ IF procedure_'count' .EQS. "" THEN GOTO no_more_files $ count=count+1 $ GOTO next_file $! $ no_more_files: $ SHOW SYMBOL/ALL $ EXIT Sample output $ submit/log=sys$login:logfile.log/param=("first","second") ajob, login $ @SYS$LOGIN:JOBINFO $ clear = F$GETQUI("CANCEL_OPERATION",,,) $ entry = F$GETQUI("DISPLAY_JOB","ENTRY_NUMBER",,"THIS_JOB") $ job_parameter_p1 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_1",entry,"") $ job_parameter_p2 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_2",entry,"") $ job_parameter_p3 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_3",entry,"") $ job_parameter_p4 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_4",entry,"") $ job_parameter_p5 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_5",entry,"") $ job_parameter_p6 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_6",entry,"") $ job_parameter_p7 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_7",entry,"") $ job_parameter_p8 = F$GETQUI("DISPLAY_ENTRY","PARAMETER_8",entry,"") $ job_name = F$GETQUI("DISPLAY_ENTRY","JOB_NAME",entry,"") $ job_logfile = F$GETQUI("DISPLAY_ENTRY","LOG_SPECIFICATION",entry,"") $ job_username = F$GETQUI("DISPLAY_ENTRY","USERNAME",entry,"WILDCARD") $ count=1 $ next_file: $ procedure_1 = F$GETQUI("DISPLAY_FILE","FILE_SPECIFICATION",,) $ IF procedure_1 .EQS. "" THEN GOTO no_more_files $ count=count+1 $ GOTO next_file $ next_file: $ procedure_2 = F$GETQUI("DISPLAY_FILE","FILE_SPECIFICATION",,) $ IF procedure_2 .EQS. "" THEN GOTO no_more_files $ count=count+1 $ GOTO next_file $ next_file: $ procedure_3 = F$GETQUI("DISPLAY_FILE","FILE_SPECIFICATION",,) $ IF procedure_3 .EQS. "" THEN GOTO no_more_files $ no_more_files: $ SHOW SYMBOL/ALL CLEAR = "" COUNT = 3 Hex = 00000003 Octal = 00000000003 ENTRY = 170 Hex = 000000AA Octal = 00000000252 JOB_LOGFILE = "$1$DKA100:[WIZARD]LOGFILE.LOG;" JOB_NAME = "AJOB" JOB_PARAMETER_P1 = "first" JOB_PARAMETER_P2 = "second" JOB_PARAMETER_P3 = "" JOB_PARAMETER_P4 = "" JOB_PARAMETER_P5 = "" JOB_PARAMETER_P6 = "" JOB_PARAMETER_P7 = "" JOB_PARAMETER_P8 = "" JOB_USERNAME = "WIZARD" P1 = "" P2 = "" P3 = "" P4 = "" P5 = "" P6 = "" P7 = "" P8 = "" PROCEDURE_1 = "_$1$DKA100:[WIZARD]AJOB.COM;1" PROCEDURE_2 = "_$1$DKA100:[WIZARD]LOGIN.COM;54" PROCEDURE_3 = "" $ EXIT WIZARD job terminated at 27-JUN-2000 11:57:35.87 Accounting information: Buffered I/O count: 60 Peak working set size: 1856 Direct I/O count: 29 Peak virtual size: 167584 Page faults: 438 Mounted volumes: 0 Charged CPU time: 0 00:00:00.04 Elapsed time: 0 00:00:00.32 See the DCL Dictionary or HELP LEXICAL under F$GETQUI and/or System Services Reference Manual SYS$GETQUI(W) for details of all the item codes available (there are lots!).
|