<<< DISK$DATA:[NOTES$LIBRARY]VAX_VMS.NOTE;1 >>> -< SIG VAX/VMS >- ================================================================================ Note 1278.0 SHUT CLUSTER 8 replies DECUSF::DELAFOSSE_G "Gilbert DELAFOSSE - UTC" 28 lines 10-APR-1991 15:00 -------------------------------------------------------------------------------- soit le petit Pb suivant - Vous avez un cluster mixte ou un LAVc (ou les deux) avec des noeuds (pas mal) distants (loin). - Votre patron ne vous a pas offert de patins a roulettes, et/ou vous n'etes pas un fana de la course a pied Comment faites vous un SHUT de votre cluster dans un temps raisonnable ? J'ai assaye SYSMAN ---> alors la ca marche pas vraiment bien ce que je fais maintenant: chaque noeud definit lors du boot des noms logiques du genre shut_node, reboot_node, shut_cluster, reboot_cluster dans une table LNM$SHUT_TABLE par exemple avec les bonnes protections (histoire qu n'importe qui n'aille pas semer la panique) On cree alors un process detache SHUT_SERVER par exemple qui scrute regulierement la table susdite pour faire un shut ou un reboot d'un sous ensemble de votre cluster il ne reste plus qu'a faire sous sysman set env/ce qui va bien do define/table=lnm$shut_table logical_name_qui_va_bien eq_string_qui_va C'est peut etre un peu lourd. Avez vous d'autres solutions ================================================================================ Note 1278.2 SHUT CLUSTER 2 of 8 DECUSF::PERROT_B "IPN Orsay" 300 lines 10-APR-1991 17:11 -< enjoy... >- -------------------------------------------------------------------------------- Voici la procedure que j'utilise: c'est tire d'un ensemble plus complexe de jeux de procedures, j'ai adapte pour que ca soit independant. J'espere que c'est ok... Il y a 5 procedure ici. La premiere (shutdown.com) est la pocedure principale. Les autres sont celles qui feront le shutdown, via sysman. Elles doivent etre deposee dans un directory predefinis. Il y a donc quelques lignes a modifier dans la premiere (toutes celles indiquant -site specific-). Cette procedure traite les noeuds CI un peu differement (pas le droit de faire un shutdown d'un noeud CI depuis un satellite par exemple... c'est un choix que vous pouvez modifier. j'ai fais ca pour limiter la catastrophe en cas de fausse manip, un jour ou j'ai arrete un Vax 8530 a la place de ma station...). Je vous laisse regarder les fonctionnalites dans le code. Pour utilisation, definir un symbole tel que SHUTDOWN=="@SHUTDOWN DUMMY " (le dummy pour pouvoir passer des pseudo qualifier). Il faut un utilitaire qui s'appelle PARMQUAL qui a deja ete depose dans VMS: il y a quelques mois pour que ca tourne. $!====================================================================== $!SHUTDOWN.COM $!Assistance au shutdown-reboot d'un noeud ou du cluster - B. Perrot - $! $! $ on control_y then goto ctrl_y $ on error then goto ctrl_y $! $ type sys$input >----------------------------------------------------------------------------< > Cette procedure permet de faire un SHUTDOWN, avec ou sans REBOOT < > automatique de tout ou partie du CLUSTER. < > Utilisation: SHUTDOWN [/qualifiers...] < > avec qualifiers = /CLUSTER | /REBOOT | /NODE=(nodea,...) | /SATELLITE < > Par defaut, on fait un shutdown du noeud sur lequel on est logue. < > Exemples: - rebooter la station ZARDOZ : SHUTDOWN/NODE=ZARDOZ/REBOOT < > - arreter tout le cluster: SHUTDOWN/CLUSTER < > - arreter tous les satellites: SHUTDOWN/SATELLITE < > - arret du noeud ou on est logue: SHUTDOWN < >----------------------------------------------------------------------------< $ say:="write sys$output " $! $ inquire rep "Continue ? (Y/N) [Y] " $ if rep .eqs. "" then rep="Y" $ if .not. rep then goto finok $! $ dico = "/CLUSTER "+ - "/NODE "+ - "/SATELLITE"+ - "/REBOOT "+ - "/NOCONFIRM" $! $ mynode=f$edit(f$getsyi("scsnode"),"trim") $ cluster="N" $! $! Liste des noeuds existants dans le cluster: $! $ nodelist="VAXCI1,VAXCI2,SAT1,SAT2,SAT3,SAT4,SAT5" !SITE SPECIFIC! $! $! Nom des noeuds CI: $! !SITE SPECIFIC! $ ci_node="VAXCI1,VAXCI2" $! $ clusterlist=nodelist $ nodelst="" $ confirm="Y" $ reboot="N" $ shutme="N" $ delay="" $! $debut: $runparmqual: $ run parmqual $ i=1 $lqual: $ if qual'i .eqs. "" then goto squal $ n=f$loc(f$extr(0,10,qual'i),dico)/10 $ goto q'n $! $q0: $ cluster="Y" $ goto qs $! $q1: $ nodelst=qval'i-"("-")" $ goto qs $! $q2: $ nodelst=nodelist-ci_node $ goto qs $! $q3: $ reboot="Y" $ goto qs $! $q4: $ confirm="N" $ goto qs $! $q5: $ say "%DO_SHUTDOWN-W-IVQUAL, unrecognized qualifier - check validity and spelling" $ say " \",qual'i,"\" $ goto ctrl_y $! $qs: $ i=i+1 $ goto lqual $! $squal: $ if cluster .and. (nodelst .nes. "") $ then $ say "%DO_SHUTDOWN-F, qualifiers /CLUSTER and /NODE or /SATELLITE are exclusive" $ goto ctrl_y $ endif $! $ if cluster $ then $ nodelst=clusterlist $ say "%DO-SHUTDOWN-I, You will SHUTDOWN all the CLUSTER." $ endif $! $ if nodelst .eqs. "" $ then $ nodelst=mynode $ else $ if .not. cluster then say - "%DO-SHUTDOWN-I, You will SHUTDOWN the node(s): ",nodelst $ endif $! $ n=-1 $ltest: $ n=n+1 $ tnode=f$element(n,",",ci_node) $ if tnode .eqs. "," then goto exitltest $ if tnode .eqs. "" then goto ltest $ if (f$loc(tnode,nodelst) .ne. f$len(nodelst)) .and. - (f$loc(mynode,ci_node) .eq. f$len(ci_node)) $ then $ say "%DO-SHUTDOWN-F, You cannot shutdown a CI-node from a satellite." $ goto ctrl_y $ endif $exitltest: $! $ if f$loc(mynode,nodelst) .ne. f$len(nodelst) $ then $ shutme="Y" $ nodelst=nodelst-mynode+","+mynode $ say "%DO-SHUTDOWN-W, You will SHUTDOWN the node you are logged on (",- mynode,")." $ endif $! $ if reboot $ then $ say "%DO_SHUTDOWN-I, Immediate REBOOT will be done after the shutdown." $ else $ say "%DO_SHUTDOWN-I, no automatic reboot will be done." $ endif $! $ if confirm $ then $ inquire rep "Please confirm (Y/N) [N] " $ if rep .eqs. "" then rep="N" $ if .not. rep then goto ctrl_y $ say "%DO_SHUTDOWN-I, the shutdown procedure will continue automatically." $ endif $! $ procname="disk:[dir.subdir.???]:" !SITE SPECIFIC! $ if reboot $ then $ procname=procname+"REBOOT_" $ else $ procname=procname+"SHUT_" $ endif $ if cluster $ then $ procname=procname+"CLUSTER" $ else $ procname=procname+"ONE_NODE" $ endif $! $ set nocontrol=y $ open/write tmp sys$login:shutdown_command.tmp $ wtmp="write tmp " $ wtmp "$SET NOON" $ wtmp "$MCR SYSMAN" $ wtmp "SET TIMEOUT 0:0:15 $ n=-1 $loop: $ n=n+1 $ node=f$element(n,",",nodelst) $ if node .eqs. "," then goto exitloop $ if node .eqs. "" then goto loop $ clsmember=f$getsyi("cluster_member",node) $ if clsmember $ then $ if (f$loc(node,ci_node) .ne. f$len(ci_node)) .and. cluster - then delay="/DELAY=00:03:00" $ wtmp "SET ENVIRON/NODE=''node'" $ wtmp "DO RUN/UIC=SYSTEM/PROC=""DO_SHUTDOWN""/PRIV=ALL/PRIO=6''delay'",- "/INPUT=''procname'/OUTPUT=NL:/ERROR=NL: SYS$SYSTEM:LOGINOUT.EXE" $ endif goto loop $exitloop: $ wtmp "EXIT" $ wtmp "$EXIT" $ close tmp $ @sys$login:shutdown_command.tmp $ delete/nolog/noconf sys$login:shutdown_command.tmp;* $! $ goto finok $! $ctrl_y: $ say "%DO_SHUTDOWN-F, Abort during execution" $finok: $ set control=y $! $EXIT $!====================================================================== $!SHUT_ONE_NODE.COM $! $! Cette procedure permet de faire un shutdown d'un seul noeud $! (appelee dans DO_SHUTDOWN) $! $SET NOON $! site dependent shutdown task ... to be done... $WAIT 00:00:03 $! $@SYS$SYSTEM:SHUTDOWN - 0 - "SHUTDOWN the node" - "NO" - "YES" - "LATER.." - "NO" - "REMOVE_NODE" $! $EXIT $!====================================================================== $!SHUT_CLUSTER.COM $! $! Cette procedure permet de faire un shutdown de tout le cluster $! (appelee dans DO_SHUTDOWN) $! $SET NOON $! site dependent shutdown task ... to be done... $WAIT 00:00:03 $! $@SYS$SYSTEM:SHUTDOWN - 0 - "SHUTDOWN all the cluster" - "NO" - "YES" - "LATER.." - "NO" - "CLUSTER_SHUTDOWN" $! $EXIT $!====================================================================== $!REBOOT_ONE_NODE.COM $! $! Cette procedure permet de faire un reboot d'un seul noeud $! (appelee dans DO_SHUTDOWN) $! $SET NOON $! site dependent shutdown task ... to be done... $WAIT 00:00:03 $! $@SYS$SYSTEM:SHUTDOWN - 0 - "REBOOT the node" - "NO" - "YES" - "IMMEDIATLY by SELF-REBOOT.." - "YES" - "REMOVE_NODE" $! $EXIT $!====================================================================== $!REBOOT_CLUSTER.COM $! $! Cette procedure permet de faire un reboot de tout le cluster $! (appelee dans DO_SHUTDOWN) $! $SET NOON $! site dependent shutdown task ... to be done... $WAIT 00:00:03 $! $@SYS$SYSTEM:SHUTDOWN - 0 - "REBOOT all the CLUSTER" - "NO" - "YES" - "IMMEDIATLY by SELF-REBOOT.." - "YES" - "CLUSTER_SHUTDOWN" $! $EXIT $!====================================================================== ================================================================================ Note 1278.3 SHUT CLUSTER 3 of 8 DECUSF::DELAFOSSE_G "Gilbert DELAFOSSE - UTC" 5 lines 11-APR-1991 13:17 -< OUiiiii >- -------------------------------------------------------------------------------- ben oui, que ca m'interresse, M'sieu Merci Gilbert ================================================================================ Note 1278.4 SHUT CLUSTER 4 of 8 DECUSF::PERROT_B "IPN Orsay" 2 lines 11-APR-1991 13:21 -------------------------------------------------------------------------------- Ben vous l'avez en .2 (et je supprime la .1 qui n'a plus de sens) ================================================================================ Note 1278.5 SHUT CLUSTER 5 of 8 DECUSF::DELAFOSSE_G "Gilbert DELAFOSSE - UTC" 17 lines 11-APR-1991 13:49 -< thanks , je pompe >- -------------------------------------------------------------------------------- Merci pour la procedure. C'est assez marrant ... ca se ressemble etrangement les symboles shut_node,shut_cluster ... sont exactement tes 4 procedures SHUT_ONE_NODE.com etc en fait quand je veux faire le shut je fais mc sysman set env/qui_va_bien do run/detach/input=shut_server.....loginout.exe do define/table= ... logical_qui_etc "true" exit le process shut_server regarde la table des shut, des qu'un logical est true il lance l'action choisie. c'est un peu moins convivial que ta solution. Merci ================================================================================ Note 1278.6 SHUT CLUSTER 6 of 8 DECUSF::LEGOUX_P "Patrice Legoux GSI Distr." 7 lines 11-APR-1991 15:01 -< .OBJ wanted >- -------------------------------------------------------------------------------- A .2: Serait il possible d'avoir le .OBJ de PARMQUAL, je ne dispose pas de FORTRAN. Le programme n'est pas bien long, mais si je pouvais me passer de le reecrire... Merci d'avance. PLX. ================================================================================ Note 1278.7 SHUT CLUSTER 7 of 8 DECUSF::PERROT_B "IPN Orsay" 7 lines 11-APR-1991 17:48 -< Done... >- -------------------------------------------------------------------------------- C'est fait: voir VMS:PARMQUAL.SAV (et VMS:PARMQUAL.TXT) Il y a le .FOR, le .OBJ et le .EXE Notez que c'est une (vieille) bidouille pour faire des procedures qui ressemble a du DCL, mais rien ne remplace un bon code compile avec un bon cld. Mais c'est tres pratique pour ecrire vite des utilitaires en DCL... La procedure en .2 donne un exemple de comment parser les parametres en DCL ensuite. ================================================================================ Note 1278.8 SHUT CLUSTER 8 of 8 DECUSF::LEGOUX_P "Patrice Legoux GSI Distr." 1 line 12-APR-1991 14:33 -< Merci >- --------------------------------------------------------------------------------