$!----------------------------------------------------------------------------+ $! WWWatcher - Monitor OSU DECthreads HTTP server and restart as needed | $!----------------------------------------------------------------------------+ $ SAVERIFY = 'F$VERIFY(0)' $ SET NOON $! $!------------------------ Site-specific Section ---------------------------- $! $! Change the following line to whatever username the server's using $ HTTP_USERNAME = "HTTP" ! Username for HTTP server $! $! Command procedure that defines any other "HTTP_" logicals (like $! HTTP_CLIENT_LIMIT and HTTP_MIN_AVAILABLE) and calls HTTP_STARTUP.COM $! with the correct parameters for your site: $ HTTP_STARTUP_COM = "SYS$STARTUP:WWW_STARTUP.COM" $! $! Note: If you wish to restart all server processes for some reason, $! just create a system logical called "HTTP_RESTART" as follows: $! $ DEFINE/SYSTEM HTTP_RESTART TRUE $! (Do NOT define it /EXEC, as the deassign here does not use $! /EXEC, and the server would continually be restarted!) $! $!----------------------------------------------------------------------------- $! $ PREVPRIV = F$SETPRV("WORLD,CMKRNL,ALTPRI,SYSPRV,SYSNAM") $ SET PROCESS/PRIO=5 ! Make sure we're running at higher priority $ IF (F$MODE() .NES. "OTHER") .OR. - ! Detached is OTHER (F$GETJPI("","PRCNAM") .NES. "WWWatcher") - ! BUT SO IS STARTUP THEN GOTO START_DETACHED ! so check proc name! $ MYPID = F$GETJPI(0,"PID") $ TMPFIL = "SYS$MANAGER:WWWATCHER_''MYPID'.TMP;1" $ PRIVREQUEST = "$WWW_ROOT:[BASE_CODE]PRIVREQUEST.EXE 931" $ NUMTRIES = 0 $ CHKLOOP: $ IF F$TRNLNM("HTTP_RESTART") .NES. "" $ THEN WRITE SYS$OUTPUT "Server restart request seen at " + F$TIME() $ DEASSIGN/SYSTEM HTTP_RESTART $ PRIVREQUEST SHUTDOWN $ GOTO RESTART $ ENDIF $ NUMTRIES = NUMTRIES + 1 $ IF F$SEARCH("''TMPFIL'") .NES. "" THEN DELETE/NOLOG/NOCONFIRM 'TMPFIL' $ IF NUMTRIES .GT. 3 THEN GOTO RESTART $ DEFINE/USER SYS$OUTPUT 'TMPFIL' $ DEFINE/USER SYS$ERROR 'TMPFIL' $ PRIVREQUEST STATISTICS $ OPEN/READ TMPFIL 'TMPFIL' $ READ TMPFIL ALINE $ CLOSE/NOLOG TMPFIL $ ALINE = F$ELEMENT(0,":",ALINE) $ IF ALINE .EQS. "error connecting to 'localhost'" $ THEN WRITE SYS$OUTPUT "Failure at " + F$TIME() $ GOTO CHKLOOP $ ELSE NUMTRIES = 0 $ WAIT 00:03:00 $ GOTO CHKLOOP $ ENDIF $ RESTART: $ CONTEXT = "" $ DUMMY = F$CONTEXT("PROCESS",CONTEXT,"MODE","NETWORK","EQL") $ DUMMY = F$CONTEXT("PROCESS",CONTEXT,"USERNAME","''HTTP_USERNAME'","EQL") $ KILLOOP: $ SET NOON $ PID = F$PID(CONTEXT) $ IF PID .EQS. "" THEN GOTO START_IT $ WRITE SYS$OUTPUT "Stopping " + PID + " at " + F$TIME() $ STOP/ID='PID' $ GOTO KILLOOP $ START_IT: $ WRITE SYS$OUTPUT "Starting new server at " + F$TIME() $ SUBMIT/USER=SYSTEM/NOLOG 'HTTP_STARTUP_COM' $ WAIT 00:03:00 $ NUMTRIES = 0 $ GOTO CHKLOOP $ ABORT: $ IF F$TYPE(CONTEXT) .EQS. "PROCESS_CONTEXT" THEN - DUMMY = F$CONTEXT("PROCESS",CONTEXT,"CANCEL") $ PREVPRIV = F$SETPRV(PREVPRIV) $ EXIT 1 + 0*F$VERIFY(SAVERIFY) $! $ START_DETACHED: $ WRITE SYS$OUTPUT "Starting WWWatcher process..." $ RUN/UIC=[1,4]/INPUT='F$ENVIRONMENT("PROCEDURE")'- /OUTPUT=SYS$MANAGER:WWW_WATCHER.LOG- /PROCESS_NAME="WWWatcher" SYS$SYSTEM:LOGINOUT.EXE $ PURGE/NOLOG/NOCONFIRM SYS$MANAGER:WWW_WATCHER.LOG $ PREVPRIV = F$SETPRV(PREVPRIV) $ EXIT 1 + 0*F$VERIFY(SAVERIFY)