Hello John,
How about if they are accmulating CPU Seconds...
I have a customer with the same problems as you are reporting. Here
is what we learned.
There is atleast one version of MPE iX 5.5 which will create
"UNAVAILABLE" ldevs when using VT that will not go away until you
abortio against the ldev. This went away when we upgraded to
Powerpatch 5.
They needed a way to abort users who were idle for a period of time,
so we created a script that polled the computer ever x seconds, issued
a showproc, accumulated the seconds, and aborted anyone idle for for y
period of time. It also uses a file to identify users that are never
aborted. Here are the scripts needed:
These are a series of scripts we use for a variety of uses so their
are probably more efficient ways to do this, but it did not require
additional programs.
Main Script EMSIDLE loops every 300 seconds, if someone is idle for
2700 seconds they are aborted
:print emsidle
PARM INTERVAL=300,MAXTIME=2700
DELETEVAR EMSJB@
SETVAR EMSDONE 0
WHILE EMSDONE = 0
SHOWPROC JOB=@S >EMSIDLEF
EMSRECTL :,8 <EMSIDLEF
SHOWVAR EMSJB@_NEW >EMSIDLEF
SHOWJOB JOB=@S
EMSRECCK !INTERVAL,!MAXTIME <EMSIDLEF
ECHO PAUSE !INTERVAL
PAUSE !INTERVAL
ENDWHILE
This script accumulates data from the SHOPROC command and stores the
info in session variables.
:print emsrectl
PARM VAL,COL
SETVAR EMSRECCNT 0
SETVAR CIERROR 0
CONTINUE
INPUT EMSREC >$NULL
WHILE CIERROR=0 DO
IF (LEN(EMSREC) > !COL+LEN("!VAL")) THEN
IF ("!VAL"=STR ('!EMSREC',!COL,LEN("!VAL"))) THEN
SETVAR EMSRECCNT EMSRECCNT+1
SETVAR EMSSESS RTRIM("EMSJB_![STR (EMSREC,24,6)]")
IF NOT BOUND (![EMSSESS]_OLD) THEN
SETVAR ![EMSSESS]_OLD 0
SETVAR ![EMSSESS]_TIME 0
ENDIF
IF NOT BOUND (![EMSSESS]_NEW) THEN
SETVAR ![EMSSESS]_NEW 0
ENDIF
SETVAR ![EMSSESS]_NEW ![EMSSESS]_NEW + &
![STR(EMSREC,9,2)]![STR(EMSREC,12,3)]
ENDIF
ENDIF
SETVAR EMSREC " "
CONTINUE
INPUT EMSREC >$NULL
ENDWHILE
DELETEVAR EMSREC
This script checks the session variables and a searchs a file called
EMSXLIST.CMT.SYS for DO NOT ABORT exceptions in the format
sessname,user.acct
It then aborts the sessions and displays messages as to what it did.
:print emsrecck
PARM INTERVAL=600,MAXTIME=2700
SETVAR CIERROR 0
CONTINUE
INPUT EMSREC >$NULL
WHILE CIERROR=0 DO
SETVAR EMSSESS "![STR (EMSREC,1,POS("=",EMSREC)-6)]"
IF ![EMSSESS+"_NEW"] <> ![EMSSESS+"_OLD"] THEN
SETVAR ![EMSSESS]_OLD ![EMSSESS]_NEW
SETVAR ![EMSSESS]_TIME 0
ELSE
SETVAR ![EMSSESS]_TIME ![EMSSESS]_TIME + !INTERVAL
ENDIF
DELETEVAR ![EMSSESS]_NEW
IF ![EMSSESS]_TIME > !MAXTIME THEN
SHOWJOB ![STR (EMSSESS,POS("_",EMSSESS)+1,6)] >EMSTMP1
EMSRECFD #,1,EMSNAME,46,30 <EMSTMP1
EMSRECFD "!EMSNAME",1,EMSNAME,1,30 <EMSXLIST.CMT.SYS
IF EMSNAME="NOTFOUND"
ECHO ABORTJOB ![STR (EMSSESS,POS("_",EMSSESS)+1,6)]
TELLOP Idle Job Aborted ![STR (EMSSESS,POS("_",EMSSESS)+1,6)]
CONTINUE
ABORTJOB #![STR (EMSSESS,POS("_",EMSSESS)+1,6)]
ELSE
ECHO NO ABORT FOR ![STR (EMSSESS,POS("_",EMSSESS)+1,6)]
EMSNAME
ENDIF
ENDIF
SETVAR EMSREC " "
SETJCW CIERROR = 0
CONTINUE
INPUT EMSREC >$NULL
ENDWHILE
DELETEVAR EMSREC
DELETEVAR EMSNAME
This script searchs a file for matching values.
:print emsrecfd
PARM VAL,COL,VAR,COL1,LEN
SETVAR CIERROR 0
CONTINUE
INPUT EMSREC >$NULL
WHILE (CIERROR=0) AND ("!VAL"<>"![STR ("!EMSREC",!COL,LEN("!VAL"))]")
DO
SETVAR EMSREC " "
CONTINUE
INPUT EMSREC >$NULL
ENDWHILE
IF (CIERROR=0) THEN
SETVAR !VAR "![STR ("!EMSREC",!COL1,!LEN)]"
ELSE
SETVAR !VAR "NOTFOUND"
ENDIF
DELETEVAR EMSREC
:
I hope this helps. As the old saying goes, "MPE scripts? I got a
million of them!"
Rgds
Mel Rees
On Wed, 12 Apr 2000 04:54:53 -0400, John Dunlop
<[log in to unmask]> wrote:
>Very many thank yous to all who contributed to this thread, particularly
>Mike Hornsby, Jeff Vance, David Gale, Chris Bartram, Ed Stouder and
>Roger Smith among others.
>
>Roger Smith contributed a document from HP which is also mainly included
>in the FAQ at www.3k.com.
>
>So...if I understand correctly, the console doesn't count, TCP/IP
>sessions don't count, DSCOPY and FTP sessions don't count and SAMBA
>mappings don't count. However, sessions that have pressed return and may
>be at the password prompt do count.
>
>Also, this thread has evolved a nifty command file courtesy of Ed
>Stouder and Jeff Vance, which will be very handy.
>
>However, I received no information on how to tell when a session last
>did some IO. I guess it's not possible from the CI.
>
>Thanks again.
>
>Cheers,
>
>John Dunlop
>
>E-mail : [log in to unmask] "If at first you don't succeed...
>Web : http://www.hp3000links.com Don't take up sky-diving !"
>"All your HP3000 resources on the Net"
>
|