- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - OpenVMS
- >
- Re: Help in Script Execution
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Forums
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-04-2009 05:04 PM
тАО01-04-2009 05:04 PM
Help in Script Execution
I have made my first script in DCL (open VMS).
I want to schedule it, please see the below script & help me in this regard.
Thanks ...
============================================
$
$! SCRIPT FOR CALCULATING SMSC 24 HOUR STATS
$
$ DEFAULT_RUNPERIOD_CHANGED = "NO" ! if set to "YES", please configure your own runperiod in the next line
$ runperiod = "00:00:09"
$
$ set verify ! for debugging
$ dclname = f$environment("PROCEDURE")
$
$ say := write sys$output
$ NODENAME = f$getsyi("NODENAME")
$ NODENAME = f$extract(0,5,NODENAME) + "1"
$ FILE_LOCATION = "SMSC_TRC0:[STATS]"
$ if f$search("''f$extract(0,8,FILE_LOCATION)'[000000]stats.dir") .eqs. ""
$ then
$ create /dir 'FILE_LOCATION'
$ endif
$
$!***RESUBMIT JOB
$ if DEFAULT_RUNPERIOD_CHANGED .eqs. "NO"
$ THEN
$ now_time = f$time()
$ now_min = f$integer(f$cvtime(,, "MINUTE"))
$
$ next_min = "00"
$ if (09 - f$integer(now_min) .GT. 0) .AND. (next_min .EQS. "00") then next_min = "0:09"
$ if (19 - f$integer(now_min) .GT. 0) .AND. (next_min .EQS. "00") then next_min = "0:19"
$ if (29 - f$integer(now_min) .GT. 0) .AND. (next_min .EQS. "00") then next_min = "0:29"
$ if (39 - f$integer(now_min) .GT. 0) .AND. (next_min .EQS. "00") then next_min = "0:39"
$ if (49 - f$integer(now_min) .GT. 0) .AND. (next_min .EQS. "00") then next_min = "0:49"
$ if (59 - f$integer(now_min) .GT. 0) .AND. (next_min .EQS. "00") then next_min = "0:59"
$ if (59 - f$integer(now_min) .EQ. 0) .AND. (next_min .EQS. "00") then next_min = "1:09"
$
$ runperiod_min = "0" + next_min + ":00"
$ next_time = f$cvtime(f$element(0,":",now_time)+ "+0-" + ''runperiod_min',"ABSOLUTE")
$ ELSE
$ next_time = f$cvtime("''now_time'+0-''runperiod'","ABSOLUTE")
$ ENDIF
$
$ submitcmd = "SUBMIT/RESTART/NOPRINT/QUEUE=''NODENAME'_BATCH/LOG=''FILE_LOCATION'STATS.LOG ''dclname'"
$ 'submitcmd' /AFTER="''next_time'"
$
$! Send PML COMMANDS
$! =================================================================================================
$! OUTPUT PARAMETERS:
$!Construct PML Commands File
$
$ create 'FILE_LOCATION'smh_stat.pml
$ open /write /error=SEND_PML PMLFILE 'FILE_LOCATION'smh_stat.pml
$ write PMLFILE "CONNECT"
$ write PMLFILE "ENABLE OUTPUT /FILE=" + FILE_LOCATION + "smh_stat.txt"
$ write PMLFILE "time"
$ write PMLFILE "show class smh /sm_rec/sm_trans /notif_trans"
$ write PMLFILE "show class smh /msg_buff"
$ write PMLFILE "DISCONNECT"
$ write PMLFILE "EXIT"
$ close PMLFILE
$ pml_script = FILE_LOCATION + "smh_stat.pml"
$
$ SEND_PML:
$ pml := $smsc$root:[bin]pml
$ define/user sys$output nla0:
$ pml/input_file='pml_script'/queue=send_pml_command/response_time=60
$
$
$! Calculate Values
$! ====================================================================================
$ TOTAL_SMTRANS = 0
$ TOTAL_NOTIFTRANS = 0
$ NUM_SMTRANS = "0"
$ NUM_NOTIFTRANS = "0"
$
$ Check_VALUES:
$ NUM_SMH = 0
$ open/read/error=VALUES_ERROR seqfp 'FILE_LOCATION'smh_stat.txt
$
$ VALUES_LOOP:
$ read/end=VALUES_ERROR seqfp LINE
$
$ if F$EXTRACT (24,26,LINE) .eqs. "Transmitted short messages"
$ THEN
$ NUM_SMH = NUM_SMH + 1
$ NUM_SMTRANS = F$ELEMENT(1,":", LINE)
$ TOTAL_SMTRANS = F$INTEGER(NUM_SMTRANS) + TOTAL_SMTRANS
$ endif
$
$ if F$EXTRACT (25,25,LINE) .eqs. "Transmitted notifications"
$ THEN
$ NUM_SMH = NUM_SMH + 1
$ NUM_NOTIFTRANS = F$ELEMENT(1,":", LINE)
$ TOTAL_NOTIFTRANS = F$INTEGER(NUM_NOTIFTRANS) + TOTAL_NOTIFTRANS
$ endif
$
$ if NUM_SMH .ne. 2*TOTAL_NUM_SMH THEN goto VALUES_LOOP
$ close seqfp
$
$ VALUES_ERROR:
$
$ STR_DATA = STR_DATA + f$string(TOTAL_SMTRANS/60) + "," + f$string(TOTAL_NOTIFTRANS/60)
$
$! ==================================================================================
$! WRITE TO FILE
$! ==================================================================================
$
$ STR_DAY = f$cvtime(,,"DAY")
$ STR_MONTH = f$cvtime(,,"MONTH")
$ STR_YEAR = f$cvtime(,,"YEAR")
$ NEW_FILENAME = "SMPN91_" + STR_YEAR + STR_MONTH + STR_DAY + ".unl"
$
$ WRITEDATA:
$ open /append /error=WRITEDATA_ERROR WRFILE 'FILE_LOCATION''NEW_FILENAME'
$ FILE_EXIST_FLAT = "true"
$ write WRFILE STR_DATA
$ close WRFILE
$
$ WRITEDATA_ERROR:
$ if FILE_EXIST_FLAT .eqs. "false"
$ then
$ create 'FILE_LOCATION''NEW_FILENAME'
$ open /append WRFILE 'FILE_LOCATION''NEW_FILENAME'
$ write WRFILE NODENAME
$ write WRFILE "Rx,Tx,Notif,Total,Buff0,Buff1"
$ close WRFILE
$ goto WRITEDATA
$ endif
$
$
$! Delete Unwanted Files
$! =================================================================================================
$ delete 'FILE_LOCATION'smh_stat.txt;*
$ delete 'FILE_LOCATION'smh_stat.pml;*
$ delete 'FILE_LOCATION'STATS.LOG;*
$ set noverify
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-04-2009 10:29 PM
тАО01-04-2009 10:29 PM
Re: Help in Script Execution
I'm not sure what the question is!
What are you trying to achieve?
What errors or problems are you seeing?
If I've read it correctly, you're trying to round up times to the next 9 minutes? If so, you can replace your block of IF statements with something like:
$ next=F$INTEGER(now_min+1)/10*10+9
$ hrs=next/60
$ next_min=F$FAO("!2ZL:!2ZL",hrs,my_min-hrs*60)
I'd also recommend changing
$ dclname = f$environment("PROCEDURE")
to
$ dclname = f$parse(";",f$environment("PROCEDURE"))
this drops the explicit version number from the filespec, so the latest version of the procedure is used.
If this doesn't help, please post more detail about your problem.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-05-2009 11:00 PM
тАО01-05-2009 11:00 PM
Re: Help in Script Execution
One thing I notice:
$ FILE_LOCATION = "SMSC_TRC0:[STATS]"
$ if f$search("''f$extract(0,8,FILE_LOCATION)'[000000]stats.dir") .eqs. ""
When you extract 0,8 you get SMSC_TRC.
Shouldn't that be 0,9?
Success.
Kees.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-06-2009 07:13 AM
тАО01-06-2009 07:13 AM
Re: Help in Script Execution
The biggest lesson here is that DCL is NOT a self documenting language.
You need to add COMMENTS to indicated what the INTEND is for a hunk of code like the playing with the 09, 19, 29,...
Second lesson is NOT to mix variables and constants unless done consistently. An example in your code:
$ FILE_LOCATION = "SMSC_TRC0:[STATS]"
$ if f$search("''f$extract(0,8,FILE_LOCATION)'[000000]stats.dir") .eqs. ""
This gives the SUGGESTION that FILE_LOCATION is a proper variable, but then the next line uses the constant 'STATS' as hard coded.
Either go all the way, or not at all!
$dev = "SMSC_TRC0"
$dir = "STATS"
$FILE_LOCATION = dev + ":[" + dir + "]"
$if f$search( dev + ":[000000]" + dir + ".DIR",...
As Kees points out, you had a count wrong.
But best is to avoid that completely by using F$LOC to look for the ":[" or better still by using F$ELEMENT
$ ... F$ELEM(0, ":", file_location) ...
2)
Hints for the time math.
1) use formulas rather then if-then-else whenever possible such as John points out.
2) use F$CVTIME to do the minute math whenever possible as it will do the hour and day roll-overs.
3) capture a start time once, and use that, not 'now' otherwise you will by surprise at some point pick up a next minute/hour/day.
Not entirely sure what you actually want, but let's assume you want a 'next' time which should be rounded to the next 9-minute tick.
Unfortunately (for this excercise) the DATE part of an absolute time is not constant in lenght. Otherwise we could just add the minute (or a minute minus a few seconds as needed) and nuke the last digits to "9:00.00". Now we have to play. For example:
$ next_now = f$cvtime("","ABSOLUTE")
$ next_temp = f$cvtime(next_now + " + 0:1:0.0", "ABSOLUTE")
$ next_hour = f$elem(0,":",next_temp)
$ next_min = ":" + f$extract(0,1,f$eleme(1,":",next_temp)) + "9"
$ next_time = f$cvtime(next_hour + next_min, "ABSOLUTE")
$ show symb next*
NEXT_HOUR = "6-JAN-2009 15"
NEXT_MIN = ":09"
NEXT_NOW = "6-JAN-2009 15:02:48.06"
NEXT_TEMP = "6-JAN-2009 15:03:48.06"
NEXT_TIME = "6-JAN-2009 15:09:00.00"
The NEXT_NOW is optional to help show the math. Without that:
$ next_temp = f$cvtime(" + 0:1:0.0", "ABSOLUTE")
$ next_hour = f$elem(0,":",next_temp)
$ next_min = ":" + f$extract(0,1,f$eleme(1,":",next_temp)) + "9"
$ next_time = f$cvtime(next_hour + next_min, "ABSOLUTE")
$ show symb next*
NEXT_HOUR = "6-JAN-2009 15"
NEXT_MIN = ":09"
NEXT_TEMP = "6-JAN-2009 15:07:32.28"
NEXT_TIME = "6-JAN-2009 15:09:00.00"
And an example 'nuking' the last digits:
$ next_temp = f$cvtime(" + 0:1:0.0", "ABSOLUTE")
$ next_date = f$cvtime(next_temp, "ABSOLUTE", "DATE")
$ next_time = f$cvtime(next_temp, "ABSOLUTE", "TIME")
$ next_time[4,7] := 9:00.00
$ next_time = next_date + " " + next_time
$ show symb next*
NEXT_DATE = "6-JAN-2009"
NEXT_TEMP = "6-JAN-2009 15:09:15.52"
NEXT_TIME = "6-JAN-2009 15:09:00.00"
hth,
Hein.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-10-2009 10:59 PM
тАО01-10-2009 10:59 PM
Re: Help in Script Execution
Please could somebody tell me the way to stop any submitted job/script in the system.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-11-2009 02:28 AM
тАО01-11-2009 02:28 AM
Re: Help in Script Execution
To delete a queued or executing batch job, the command is:
$ DELETE/ENTRY:nnn
where nnn is the queue entry number for the job (reported from the SUBMIT command and available from the SHOW QUEUE command).
A fuller description is available in the online HELP text and the OpenVMS DCL Dictionary.
- Bob Gezelter, http://www.rlgsc.com
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-11-2009 08:08 AM
тАО01-11-2009 08:08 AM
Re: Help in Script Execution
You'll need to stop the queue, or nuke the rogue command file with for example:
$ copy nl: /over tmp.com
or
$ set file/att=(ebk:1,ffb=0) tmp.com
Hein.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО01-11-2009 11:18 AM
тАО01-11-2009 11:18 AM