# Filename: PRESHUT
#
# Courtesy of Beechglen Development
# 4219 Harrison Avenue
# Cincinnati, Ohio 45211
# (513) 922-0509
# http://www.beechglen.com
# mailto:support@beechglen.com
#
# Unsupported freeware. Beechglen assumes no liability
# for use or misuse of this script.
#
#
# Change history. 3/16/2004 Added disk space check. Systems
# with less than < 16384 sectors
# free space won't boot with
# NMSGDT1A, NMSGDT2A, or NMSGDV1A
# ===============================================================
echo
echo This script should be run prior to a system shutdown to
echo gracefully stop processing. If there are any batch jobs running
echo it is your responsibility to verify that they can be aborted
echo with no adverse effects on the system
echo
#
setvar hpautocont,true
setvar InvVideo,chr(27) + "&dB"
limit 0,0
# ===============================================================
if hpaccount <> "SYS" or hpuser <> "MANAGER" or hpldevin <> 20 then
echo
echo You must be logged on as MANAGER.SYS on LDEV 20 to
echo execute this script.
echo
return
endif
# ===============================================================
# - Prompt section. Answer questions here
#
echo
echo I will be creating a copy of the current configuration
echo to the group PREVCFG.SYS If for some reason you need to
echo reboot the system to get back to this known point in time
echo (for instance the new configuration is bad) then you can
echo issue the ISL command START NORECOVERY GROUP=PREVCFG
echo
echo Press [Return] to continue
echo
input Answer
#
# - Ask if any configuration listings are needed.
#
echo
echo !InvVideo Are you shutting down for system maintenance?
echo
echo If you are planning to work on or change hardware
echo components you MUST power off all connected devices.
echo SCSI adapters and their connected devices are especially
echo vulnerable to blown fuses or damage when maintenance
echo is performed while they are running.
echo
echo Additionally, because the results of maintenance are
echo never guaranteed, it is prudent to have an SLT and a
echo backup prior to any of these functions.
echo
input CreateSLT,'!InvVideo Would you like me to create an SLT?'
setvar CreateSLT,lft(ups(CreateSLT),1)
echo If you are shutting down to perform an operating system
echo update; or to install, replace, or repair hardware; you
echo should have a current configuration listing.
echo
input PrintConfigList,'!InvVideo Would you like me to produce &
a configuration listing?'
setvar PrintConfigList,lft(ups(PrintConfigList),1)
# ===============================================================
# -- Shut down ESP data collection. There is a timing conflict
# during a system shutdown where active processes that access
# the file system after it has been closed potentially can
# cause a system abort before the system reaches SHUT 6.
# ESP/3000 is susceptible to this bug.
if finfo("/ESP","EXISTS") then
echo !InvVideo Shutting down ESP/3000 data collection.
purge ESPRUN.PUB.SYS >$null
endif
# ===============================================================
# -- Verify that the creator of SYSSTART.PUB.SYS is MANAGER.SYS
# If not, it will not execute during bootup.
if finfo("SYSSTART.PUB.SYS","EXISTS") then
if finfo("SYSSTART.PUB.SYS","OWNER") <> "MANAGER.SYS" then
altfile sysstart.pub.sys;owner=MANAGER.SYS;groupid=SYS
echo
echo !InvVideo I corrected the creator of SYSSTART.PUB.SYS to
echo !InvVideo be MANAGER.SYS
echo
endif
endif
# ===============================================================
# -- Shut down network services. If you run SNA you should put
# your SNACONTROL shutdown commands in this section as well.
echo !InvVideo Shutting down network transport services.
ABORTJOB FTP.SYS
ABORTJOB INETD,MANAGER.SYS
NSCONTROL STOP
NSCONTROL ABORT
NETCONTROL STOP
setvar NETRunning,"Y"
while NETRunning = "Y"
file testit=netcp.net.sys;exc
continue
setvar hpfserr,0
print *testit;out=$null;end=1 >$null
if hpfserr = 90 or hpfserr = 91 then
pause 5
else
setvar NETRunning,"N"
endif
endwhile
echo
echo Network transport services shutdown is complete.
echo
# ===============================================================
# -- Verify NMCONFIG FILE.If the DTS or NS subsystems are not
# validated then validate them.
# Run NMMGRVAL with parm=1 to set variables that indicate
# which subsystems in NMCONFIG are not validated.
# For any that are not, create a script to automatically
# validate.
echo
echo !InvVideo Checking NMCONFIG file for non-validated subsystems.
echo
nmmgrval.pub.sys,1
setvar ValAny, VALDTS + VALNETXPORT + VALIBM + VALOSI
if ValAny > 0 then
purge NMMGRCMD,temp >$null
build NMMGRCMD;rec=-80,,f,ascii;temp
file nmcmd=nmmgrcmd,oldtemp;dev=disc
echo openconf nmconfig.pub.sys >>*nmcmd
if VALDTS > 0 then
echo The DTS subsystem is not validated. I will validate it.
echo validateconf dts >>*nmcmd
endif
if VALNETXPORT > 0 then
echo NETXPORT subsystem is not validated. I will validate it.
echo validateconf netxport >>*nmcmd
endif
if VALIBM > 0 then
echo The IBM subsystem is not validated. I will validate it.
echo validateconf ibm >>*nmcmd
endif
if VALOSI > 0 then
echo The OSI subsystem is not validated. I will validate it.
echo validateconf osi >>*nmcmd
endif
echo exit >>*nmcmd
file formlist=$stdlist
file nmmgrcmd,oldtemp;dev=disc
echo Validating selected subsystems.
nmmgr
reset nmmgrcmd
reset formlist
reset nmcmd
purge nmmgrcmd,temp
else
echo All NMCONFIG subsystems are validated.
echo
endif
# ===============================================================
#
# - Create backup copy of the current system configuration.
#
echo
echo !InvVideo Create a copy of the current system configuration.
echo
purge sysgin,temp >$null
build sysgin;rec=-80,,f,ascii;temp
file sgcmd=sysgin,oldtemp;dev=disc
echo @.pub.sys,@.net.sys;directory;show >indfile
echo permyes on >>*sgcmd
echo keep >>*sgcmd
echo exit >>*sgcmd
file sysgin,oldtemp;dev=disc
sysgen bootup,prevcfg
# ===============================================================
if CreateSLT = "Y" then
purge sysgin,temp >$null
build sysgin;rec=-80,,f,ascii;temp
file sgcmd=sysgin,oldtemp;dev=disc
echo @.pub.sys,@.net.sys;directory;show >indfile
echo tape store=^indfile >>*sgcmd
echo exit >>*sgcmd
file sysgin,oldtemp;dev=disc
sysgen config
if cierror <> 0 then
echo
echo !InvVideo ===================================
echo !InvVideo The SLT is BAD! Do not unless you
echo !InvVideo know you can recover without it.
echo !InvVideo ===================================
echo
endif
purge sysgin,temp
purge indfile,temp
reset sgcmd
reset sysgin
endif
if PrintConfigList = "Y" then
purge sysgin,temp >$null
build sysgin;rec=-80,,f,ascii;temp
file sgcmd=sysgin,oldtemp;dev=disc
echo io >>*sgcmd
echo ld >>*sgcmd
echo lp >>*sgcmd
echo exit >>*sgcmd
echo exit >>*sgcmd
file sysgout;dev=lp
file sysgin,oldtemp;dev=disc
sysgen config
echo
echo !InvVideo Config listing has been produce on device LP.
echo
purge sysgin,temp
reset sysgout
reset sgcmd
reset sysgin
endif
echo
# ===============================================================
#
# - Check to see if ESP/3000 has shut down. If not,
# wait for it. It should take no longer than 2 minutes
# or so from the time it is signalled.
if finfo("/ESP","EXISTS") then
setvar ESPRunning,"Y"
setvar NumTries,0
while ESPRunning = "Y"
file testit=espmain.pub.esp;exc
continue
setvar hpfserr,0
print *testit;out=$null;end=1 >$null
if hpfserr = 90 or hpfserr = 91 then
setvar NumTries,Numtries + 1
if NumTries = 1 then
echo
echo ESP/3000 is still running. Waiting for it to
echo completely shutdown. This should take no more
echo 2 minutes.
endif
pause 10
else
setvar ESPRunning,"N"
endif
endwhile
endif
# ===============================================================
# Disk space check section
# Check for critically low disk space on system volset that
# could prevent the system from rebooting. See SR8606351808
# Also check for contiguous disk space on LDEV 1 that could
# prevent update from SLT.
echo
echo Checking free disk space on MPEXL_SYSTEM_VOLUME_SET
echo (1 sector = 256 bytes)
echo
deletevar _c_@ >$null
purge chkdisk1 >$null
build chkdisk1;rec=-80,,f,ascii;disc=100;nocctl
file chkdisk1=chkdisk1,old
discfree.pub.sys "d,,mpexl_system_volume_set" >*chkdisk1
purge chkdisk2,temp > $null
grep.hpbin.sys "'AVAIL TO' CHKDISK1" > CHKDISK2
file chkdisk2=chkdisk2,oldtemp
input _c_chkdisk2_rec < *chkdisk2
setvar _c_avail_trans_sectors str('!_c_chkdisk2_rec',24,-34)
setvar _c_avail_perm_sectors str('!_c_chkdisk2_rec',62,-72)
setvar _c_avail_trans repl("!_c_avail_trans_sectors",' ','0')
setvar _c_avail_perm repl("!_c_avail_perm_sectors",' ','0')
setvar _c_avail_trans_n !_c_avail_trans
setvar _c_avail_perm_n !_c_avail_perm
# ...the following data sourced from ":discfree d" output...
# !_c_avail_perm_n permanent sectors exist on the sysvolset.
# !_c_avail_trans_n transient sectors exist on the sysvolset.
if _c_avail_perm_n < 100000
echo ![InvVideo]There are less than 100,000 permanent sectors
echo ![InvVideo]available on the system volume set.
echo
echo Some systems have been known to completely fail to reboot
echo when critically low on permanent disk space.
echo
echo Contact Beechglen at (513) 922-0509 for assistance with
echo cleaning up disk space. Use BIGFILES.PUB.ESP (download
echo the latest version it from http://www.beechglen.com)
echo to identify large files that are targets for removal to
echo free up disk space.
echo
echo ![InvVideo]It is recommended that you NOT continue with this
echo ![InvVideo]system shutdown until you have remedied this disk
echo ![InvVideo]space situation.
echo
echo Press [RETURN] to continue
echo
input Answer
else
echo Free disk space OK for the purposes of rebooting
echo
endif
echo
echo Checking fragmented disk space on LDEV 1.
echo
purge chkdisk1 > $null
purge chkdisk2,temp > $null
purge chkdisk3 > $null
build chkdisk3;rec=-80,,f,ascii;disc=100;nocctl
file chkdisk3=chkdisk3,old
discfree.pub.sys "a,1" >*chkdisk3
purge chkdisk4,temp > $null
xeq grep.hpbin.sys "'-AND UP' CHKDISK3" >CHKDISK4
file chkdisk4=chkdisk4,oldtemp
input _c_chkdisk4_rec < *chkdisk4
setvar _c_free_contig_nbr100blks str('!_c_chkdisk4_rec',1,-6)
setvar _c_free_contig_100ksects str('!_c_chkdisk4_rec',52,-61)
setvar _c_free_nbr100blks repl("!_c_free_contig_nbr100blks",' ','0')
setvar _c_free_100ksects repl("!_c_free_contig_100ksects",' ','0')
setvar _c_free_nbr100blks_n !_c_free_nbr100blks
setvar _c_free_100ksects_n !_c_free_100ksects
purge chkdisk3 > $null
purge chkdisk4,temp > $null
# the following data sourced from ":discfree 'a,1'" output...
# !_c_free_nbr100blks_n (100,000+) sector blocks are on ldev #1
# and these blocks add up to !_c_free_100ksects_n sectors total.
if _c_free_100ksects_n < 200000
echo ![InvVideo]Overall there is less than 200,000 contiguous
echo ![InvVideo]sectors of permanent disk space on LDEV 1.
echo
echo Having such a small amount of contiguous
echo permanent disk space on LDEV #1 could prevent
echo an UPDATE from CSLT operation from succeeding.
echo
echo It is suggested you take steps to free up contiguous
echo permanent disk space on LDEV 1. Feel free to call
echo Beechglen at (513) 922-0509 for assistance.
echo
echo Press [RETURN] to continue
echo
input Answer
else
echo Fragmented disk space check on LDEV 1 results are OK
echo for the purposes of rebooting.
echo
endif
# ===============================================================
echo
echo SHUTDOWN pre-processing has completed. You may now shut
echo the system down after any actions listed above are complete.
echo Press CTL-A then type in SHUTDOWN and press [RETURN].
echo
# ===============================================================