FR 2773241 A1 19990702 FR 9716699 A 19971230 Procédé d'assistance à l'administration d'une application distribuée basée sur un fichier binaire de configuration dans un système informatique s La présente invention concerne un procédé d'assistance à l'administration d'une application distribuée basée sur un fichier binaire de configuration dans un système informatique. Ce procédé d'assistance à l'administration peut notamment être appliqué à un gestionnaire de traitement des transactions tel que celui commercialisé sous la marque 1o "Tuxedo". L'application "Tuxedo" permet à différents logiciels qui ne se connaissent pas mais qui respectent un certain protocole, de travailler ensemble. Généralement, I'application "Tuxedo" est une application distribuée c'est-à-dire une application qui s'exécute sur plusieurs machines en même temps. On appelle "machine", le noeud du réseau au niveau duquel les serveurs de l'application "Tuxedo" s'exécutent, et "machine maître" celle contrôlant l'application "Tuxedo". La figure 8 illustre le fonctionnement de l'application "Tuxedo". Lorsque l'application "Tuxedo" est lancée, le fichier binaire de configuration (TUXCONFIG) est chargé du disque dans le tableau bulletin (Bulletin Board, BB) de la machine maître (Mm). Le tableau bulletin (BB) représente un ensemble de structures de données situées dans la mémoire partagée et contenant des informations sur les transactions, les serveurs, les services et les clients appartenant à l'application "Tuxedo". Lors du lancement de la machine maître (Mm), le tableau bulletin (BB) est chargé dans la mémoire de la machine maître (Mm) à partir du fichier binaire de configuration "Tuxedo" (TUXCONFIG). Puis, il est diffusé vers les machines esclaves (Me) par le processus maître de l'application appelé liaison distinguée du tableau bulletin DBBL (Distinguished Bulletin Board Liaison). Chaque machine de l'application est sous le contrôle d'un processus appelé liaison du tableau bulletin BBL (Bulletin Bord Liaison). La liaison distinguée du tableau bulletin DBBL est un processus administratif qui communique avec les processus (BBL), pour coordonner les mises à jour du tableau bulletin (BB). La liaison du tableau bulletin BBL est un processus administratif chargé de tenir à jour une copie du tableau bulletin (BB) sur sa propre machine (Me). Chaque machine (Me) est sous le contrôle d'un processus appelé BBL, défini implicitement par "Tuxedo". Le pont (BRIDGE) (1) est un processus de gestion des communications entre les serveurs de l'application "Tuxedo". Chaque machine est dotée d'un pont défini o10 implicitement par "Tuxedo". Le serveur TMS (Transaction Manager Server) est un processus qui gère un protocole de validation et la reprise pour les transactions exécutées par plusieurs serveurs applicatifs. Le module d'écoute (tlisten, 3) est un processus qui gère les messages destinés à l'application "Tuxedo" sur une machine donnée, avant que le processus pont (BRIDGE) de cette machine n'ait été lancée. Un module d'écoute permet à une machine de recevoir des informations provenant d'autres machines. Un module d'écoute est obligatoire sur chaque machine lorsque l'application est distribuée. L'application "Tuxedo" est créée par la constitution d'un fichier binaire de configuration qui définit l'architecture de ladite application (figure 7). Lors de la création du fichier de configuration, un administrateur définit les services (Se) fournis par l'application et les assigne à des serveurs (Sr) d'application. L'administrateur définit ensuite des groupes (G) et assigne un ensemble de serveurs (Sr). Enfin, I'administrateur assigne des groupes (G) à une machine (M). Chaque application doit être dotée au minimum d'un groupe (G), d'un service (Se) et d'un serveur (Sr). Une machine (M) peut gérer plusieurs groupes (G). Après la création d'une application "Tuxedo", celle-ci doit être administrée. L'objet de l'invention est de créer un système d'assistance à l'administration de l'application "Tuxedo". Les principales étapes concernant l'administration d'une application "Tuxedo" consistent en: une étape de chargement du fichier binaire de configuration de l'application "Tuxedo"; - une étape de lancement des modules d'écoute lorsque l'application "Tuxedo" est une application distribuée; - une étape de lancement de l'application Tuxedo; - une étape de contrôle de l'application. Celle-ci consiste à afficher des informations et à procéder, s'il y a lieu aux corrections requises; - une étape d'arrêt de l'application; et éventuellement - une étape d'arrêt des modules d'écoute lorsque ceux-ci ont été o10 lancés. L'administration d'une application distribuée peut rapidement devenir très complexe. En effet, avant que cette administration puisse démarrer, l'opérateur doit activer un module d'écoute sur chaque machine esclave sur laquelle il veut agir. Pour cela, I'administrateur doit tout d'abord consulter un i5 fichier contenant des informations sur l'activation des modules d'écoute. Ce fichier est généralement stocké, à une place dont il faut se souvenir, sur chaque machine. Puis à l'aide de ces informations, I'opérateur doit activer tour à tour le module d'écoute de chaque machine. Ainsi, si l'application concerne dix machines, I'opérateur doit activer le module d'écoute sur les dix machines, puis à la fin de l'application, désactiver les dix modules d'écoute. Cette opération répétitive est longue et fastidieuse. Pour effectuer ces tâches, chaque administrateur a sa solution. La solution la plus courante est de stocker sur chaque machine, a une place dont il faut se souvenir des scripts d'activation des modules d'écoute et d'avoir une copie papier du fichier de configuration. L'administrateur doit veiller à ce que les informations soient à jour à tout moment. A chaque fois que la configuration change, il ne doit pas oublier d'imprimer une copie papier du fichier de configuration et de mettre à jour les scripts sur les machines esclaves. D'autre part, à chaque fois que l'opérateur veut agir sur un élément d'une application, il doit pouvoir identifier rapidement et de façon sûre une ressource donnée comme par exemple, I'arrêt du serveur "servl" appartenant au groupe "group1" sur la machine "machl". Lorsque le nombre d'application augmente, ces opérations manuelles sont source de nombreuses erreurs. La présente invention a pour but de remédier aux inconvénients de l'art antérieur en proposant un procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions, basée sur le fichier binaire de configuration de l'application caractérisé en ce que ledit procédé comporte: - une étape de décompilation du fichier de configuration actif de la machine maître, - une étape de récupération d'informations dans le fichier de configuration décompilé de la machine maître (Mm), - une étape de vérification de la consistance de ladite application mise en oeuvre sur une machine donnée. Selon une autre particularité, ledit procédé permet de gérer au moins un module d'écoute (3) d'une machine quelconque de l'application à partir d'une autre machine. Selon une autre particularité, les informations concernant ladite application distribuée sont directement prélevées dans le fichier de configuration actif de la machine maître. Selon une autre particularité, I'étape de vérification de consistance de ladite application consiste en une comparaison entre des informations issues du fichier de configuration de la machine maître et des informations issues de ladite application courante mise en oeuvre sur une machine donnée. Selon une autre particularité, ladite gestion des modules d'écoute permet de lancer et d'arrêter au moins un module d'écoute, d'afficher des informations concernant au moins un module d'écoute, de modifier le journal d'au moins un module d'écoute, de vérifier le script d'au moins un module d'écoute et de mettre à jour le script d'au moins un module d'écoute. Selon une autre particularité, un administrateur se trouvant sur une machine quelconque du réseau peut lancer ou arrêter un module d'écoute mis en oeuvre sur une autre machine du réseau. Selon une autre particularité, ledit procédé permet d'activer plusieurs modules d'écoute en une seule opération. Selon une autre particularité, une interface graphique facilite la gestion des modules d'écoute. Selon une autre particularité, ladite interface graphique permet de visualiser la structure de ladite application et de sélectionner une valeur voulue dans une liste de valeurs de la configuration courante. Selon une autre particularité, lorsque le fichier contenant des informations sur ladite application mise en oeuvre sur une machine donnée (tlog) est inexistant, le procédé le génère automatiquement pour pouvoir l'utiliser lors du prochain lancement des modules d'écoute (3). Selon une autre particularité, lesdites informations affichées concernant au moins un module d'écoute comprennent au moins le nom de ladite application, le nom logique de la machine (LMID) sur laquelle ladite application est exécutée, I'identification de l'administrateur (UID) de ladite application, I'adresse utilisé par le module d'écoute (NLSADRR), le chemin d'accès au réseau de ladite application, le chemin d'accès au fichier journal dudit module d'écoute (LLFPN). D'autres particularités et avantages de la présente invention apparaîtront plus clairement à la lecture de la description ci-après faite en référence aux dessins annexés dans lesquels: - la figure 1 représente une fenêtre de l'interface graphique proposant l'accès aux commandes principales de gestion des modules; - la figure 2 représente une fenêtre de l'interface graphique selon la figure 1 permettant d'activer un ou plusieurs modules d'écoute; - la figure 3 représente une fenêtre de l'interface graphique selon la figure 1 permettant l'arrêt d'un ou de plusieurs modules d'écoute; - la figure 4 représente une fenêtre de l'interface graphique selon la revendication 1 permettant l'affichage d'informations concernant un module d'écoute d'une application donnée; la figure 5 représente une fenêtre de l'interface graphique selon la revendication 1 qui permet de vérifier le script d'un module d'écoute d'une application donnée; - la figure 6 représente une fenêtre de l'interface graphique selon la revendication 1 qui permet de mettre à jour le script d'un module d'écoute sur une machine donnée d'une application donnée; - la figure 7 représente la structure générale d'une application distribuée d'un gestionnaire de traitement des transactions; - la figure 8 représente un exemple d'application d'un gestionnaire de traitement des transactions. Suit un exemple non limitatif de spécification de fichier de configuration. Ce fichier de configuration, présenté en annexe 1, concerne l'application "Tuxedo". Il est divisé en sept sections (ressources, machines, groupe, serveur, service, réseau). La section ressource contient des informations générales concernant l'application. Ces informations sont communes à toutes les machines et sont constituées par les paramètres suivants: - IPCKEY qui représente une clé numérique identifiant le segment de mémoire partagée dans lequel sont stockées les structures d'application. Grâce à cette clé numérique, une application donnée ne peut pas être en conflit avec d'autres applications; - MASTER qui représente la machine maître; - DOMAINID qui représente le domaine de l'application; MAXACCESSERS qui définit le nombre maximum de personnes pouvant accéder à l'application; - MAXSERVERS qui définit le nombre maximum de serveurs pouvant être rattaché à l'application; 7 2773241 - MAXSERVICES qui définit le nombre maximum de services pouvant être rattaché a l'application; - OPTIONS qui permet de préciser si l'application a lieu sur un réseau local; - MODEL qui permet de préciser si l'application est distribuée ou si elle ne l'est pas. La section machines contient des informations sur chaque machine (puce, trifide, zig, orage) du réseau. Ces informations sont constituées par lo les paramètres suivants: - LMID (Logital Machine ID) qui définit le nom logique de la machine c'est-à-dire le nom utilisé en interne par l'application, à la place du nom réseau; - TUXDIR qui spécifie le chemin d'accès au répertoire d'installation du logiciel "Tuxedo"; - APPDIR qui spécifie le chemin d'accès aux serveurs applicatifs, c'est-à-dire le chemin menant aux programmes de l'application (par exemple les programmes concernant l'application "TUXEDO"); - TUXCONFIG qui spécifie le chemin d'accès absolu au fichier binaire de configuration TUXCONFIG, celui-ci contenant des informations sur l'application; - ENVFILE qui spécifie le chemin d'accès au fichier contenant les variables d'environnement pour les serveurs et pour les clients d'une machine donnée; - ULOGPFX qui spécifie le chemin d'accès au fichier "ULOG" qui contient des informations sur l'historique de l'application. La section groupe est la section dans laquelle chaque machine est attribuée à un groupe. Dans l'exemple de l'annexe 1, il existe quatre groupes. Un groupe est un ensemble de serveurs assurant des services connexes. Dans le cas le plus simple, un groupe n'est constitué que d'un seul serveur. Tous les serveurs d'un groupe doivent s'exécuter sur la même machine. Une application doit comporter au moins un groupe. La section serveur fournit des renseignements sur chaque serveur. Un serveur est un module fournisseur de services. Dans l'exemple à l'annexe 1, il existe quatre serveurs. Dans le cas le plus simple, un serveur assure un seul service. Une application doit être dotée d'au moins un serveur. La section serveur fournit les renseignements suivants: SRVGRP qui définit le groupe auquel le serveur est affilié; - SRVID qui définit le numéro d'identification du serveur; - MIN, MAX qui précisent le nombre maximum et minimum d'occurrences de ce serveur; - RQADDR qui définit le nom de la queue de message utilisée pour l'envoi d'un message; - dans REPLYQ l'administrateur décide de l'existence d'une queue de réponse; - CLOPT qui indique les options de démarrage du serveur (services disponibles priorité,....). Dans la section service, I'administrateur peut spécifier les services. Un service est un ensemble de fonctions répondant à des requêtes de services émanant d'utilisateurs finaux de l'application. Si l'administrateur désire indiquer des valeurs facultatives différentes des valeurs par défaut, les services doivent obligatoirement être définis. La section réseau (network) contient pour chaque machine: - I'adresse complète utilisée par le processus pont (BRIDGE) appelée "Network Address" ou "NADDR". Les quatre premiers chiffres (0002 dans l'exemple de la figure 4) représentent le protocole de communication utilisé ("tcp" dans l'exemple ci-dessus). Les quatre chiffres suivants représentent le numéro de port utilisé par le processus et les chiffres suivants représentent l'adresse réseau de la machine; 9 2773241 - le chemin d'accès au pont (BRIDGE) de la machine. Le pont est un processus de gestion des communications entre les serveurs de l'application. Il sert à amorcer l'application. Chaque machine est dotée d'un pont. - I'adresse complète du module d'écoute appelée "NLSADDR". Les quatre premiers chiffres représentent le protocole de communication utilisé. Les quatre chiffres suivants représentent le numéro de port utilisé par le module d'écoute qui doit être différent de celui utilisé par le processus pont (BRIDGE). Les chiffres suivants représentent l'adresse réseau de la o10 machine. La particularité de l'invention est que les informations concernant l'application sont directement prélevées dans le fichier actif de la machine maître. Un administrateur se trouvant sur une machine quelconque du réseau peut gérer l'exécution de la commande "getUtuxval" sur la machine maître pour le compte de l'administrateur comme représenté en page 27 de l'annexe 2. La sous routine "gettuxconfig" du programme utilisé dans la mise en oeuvre du procédé d'assistance à l'administration d'une application distribuée, recherche sur le disque dur de la machine maître le fichier actif de configuration de l'application. Celui-ci est ensuite décompilé au moyen de la commande "tmunloadcf" (Page 28 de Annexe 2, Lignes 85 à 99). get_tuxconfig() { if [ -s tuxconf.tmp.$appname] then cat tuxconf.tmp.$appname else rm -f tuxconf tmp.* prog="$Env"' $TUXDIR/bin/tmunloadcf echo "\nexit $?" I #print -r "$prog" > prog rsh "$MASTER" -1 "$ADMIN" "$prog" I tee tuxconftmp.$appname fi gettlistenlog 2773241 } La sous routine "gettuxval" de ce programme (Page 28 de l'annexe 2, lignes 112 à 183) prélève les paramètres tels que LMID, APPDIR, TUXCONFIG, TUXDIR, ROOTDIR, ULOGPFX, NLSADDR, UID et BRIDGE du fichier binaire de configuration de l'application obtenue à l'aide de la sous routine "get_tuxconfig". get_tuxval() { get_tuxconfig \ sed -e is/=/ /g" -e 's/"//g' -e 'sA/\\\VO/g' 1 awk' Les valeurs des paramètres recherchées sont tout d'abord initialisées. Pour cela des matrices associatives appelées "tuxconfigsection" sont créées. BEGIN { tuxconfig_section["*RESOURCES"] = 1 tuxconfig_section["*MACHINES"] = 2 tuxconfig_section["*GROUPS"] = 3 tuxconfig_section["*SERVERS"] = 4 tuxconfig_section["*SERVICES"] = 5 tuxconfig_section["*ROUTING"] = 6 tuxconfig_section["*NETWORK"] = 7 Un index est associé à chaque matrice. Les paramètres recherchés sont situés dans différentes sections du fichier de configuration. Par exemple pour l'application "Tuxedo", ces différentes sections, au nombre de sept, sont appelées "Ressources", "Machines", "Groupes", "Serveurs", "Services" et "Réseau". Pour pouvoir prélever les paramètres dont l'ordinateur a besoin, il doit pouvoir repérer l'endroit o il se trouve dans le fichier de configuration. Dans ce programme, lorsque le nombre de champ (NF) est égal à 1, I'ordinateur se trouve au début d'une section. NF-=1{ if ( $1 in tuxconfig_section) { section = tuxconfig_section[$1] next } } Si l'ordinateur est dans la section 2 et que le deuxième mot est LMID, I'ordinateur prélève le nom logique de la machine (LMID) sur laquelle l'administrateur se trouve. section 2 && $2 = "LMID" { # MACHINES section if( $3= machine){ printf "uname=%s\n", $1 machfound= 1 } else { # reset mach_found for furtheur machines mach found = 0 } next } Si l'ordinateur est dans la section 2 et que le premier mot est APPDIR, il prélève le chemin d'accès au répertoire sous lequel les serveurs sont amorcés. section = 2 && $1="APPDIR" && mach_found=l { printf "appdir=%s\n", $2 appdir = $2 next ) En procédant de la même manière, I'ordinateur va relever successivement dans la section machine du fichier de configuration le chemin d'accès absolu au fichier binaire de configuration (TUXCONFIG), le chemin d'accès au répertoire d'installation du logiciel Tuxedo (TUXDIR ou ROOTDIR), des informations sur l'historique de l'application (ULOGPFX) et dans la section réseau l'adresse du pont de la machine (NLSADDR). section -- 2 && $1=="TUXCONFIG" && mach_found = 1 { printf "tuxconfig=%/os\n", $2 next } section = 2 && $1="TUXDIR" && machfound=1 { printf "tuxdir=%s\n", $2 next } section - 2 && $1="ROOTDIR" && mach_foundl { # for V4 printf "tuxdir=%s\n", $2 next } section 2 && $1="ULOGPFX" && mach_found=1 { ulogpfx= 1; printf "ulogpfx=%s\n", $2 next } section= 7 && NF = 1 { if ( $1 machine) {machfound = 1} else { # reset mach_found for other machines machfound= 0 } next } J section 7 && $1="NLSADDR" && machfound=l { printf "nlsaddr=%s\n", $2 next ) Le programme exécute une boucle sur cette sous routine pour chaque machine jusqu'à ce que l'ordinateur trouve la machine courante. Puis, I'ordinateur se procure dans la section ressources du fichier de configuration l'identification de l'utilisateur de l'application (UID). section = 1 && $1 = "UID" {printf "uid=-/os\n", $2;next} Si aucune valeur n'a été définie pour l'UID dans le fichier de configuration, c'est l'UID de la personne qui a construit l'application qui sera utilisé. Puis, l'ordinateur relève dans la section réseau du fichier de configuration le chemin d'accès au pont (BRIDGE) de la machine. section = 7 && $1-"BRIDGE" && mach_foundl { Le paramètre ULOGPFX représentant l'historique de la machine est une valeur optionnelle. Lorsqu'il est inexistant, I'ordinateur va générer un fichier appelé "ULOG" dans le répertoire APPDIR contenant des informations sur les manipulations opérées sur l'application. if( ulogpfx = O) { printf "ulogpfx=%s/ULOG\n", appdir} } ' machine=$machine appname=$appname lang=' sed -e "s/=/ /g" -e "sP//g" -e "s/,//" $ConfDir/$appname.tux j awk' $1 = "LANG" {prinff"lang=", $2} ' } De plus, I'ordinateur a besoin de la langue de travail de l'application représentée par le paramètre LANG, ainsi que de la valeur "tlog". Le paramètre LANG se trouve dans le fichier de configuration de l'utilisateur. lang=' sed -e "s/=/ /g" -e "s/'//g" -e "s/;/ /" $ConfDir/$appname.tux t awk' $1 = "LANG" {printf "lang=", $2}' La valeur "tlog" fait référence au fichier "tlistenlog. . " contenant le nom du fichier historique du module d'écoute. Dans la sous routine gettuxval, le programme a rassemblé toutes les variables d'environnement dont il a besoin pour pouvoir lancer le procédé d'assistance à l'administration d'une application distribuée. Ce procédé permet, en outre d'amorcer et d'arrêter un ou plusieurs modules d'écoute, d'afficher des informations sur un ou plusieurs modules d'écoute, de modifier le journal d'un ou plusieurs modules d'écoute, de vérifier le script d'un ou plusieurs modules d'écoute et enfin de mettre à jour le script d'un ou plusieurs modules d'écoute (Figure 1). Le procédé d'assistance à l'administration d'une application "Tuxedo" distribuée est doté d'une interface graphique qui permet l'accès aux commandes du gestionnaire de traitement des transactions. Pour exécuter une tâche, I'administrateur n'est pas tenu d'entrer des commandes, il lui suffit de cliquer sur des icônes, d'appeler des menus et de spécifier des valeurs via des boîtes de dialogue. Le procédé d'assistance est piloté par menus, structurés sous forme d'arborescence. La sélection d'une option dans le menu principal entraîne l'affichage du menu de niveau inférieur associé. Ce processus est répété jusqu'à l'affichage d'une boite de dialogue déroulante dans laquelle l'administrateur doit entrer des valeurs de paramètre. Afin de pouvoir gérer les modules d'écoute de l'application "Tuxedo" distribuée, I'administrateur sélectionne à partir du menu principal de 'Tuxedo Commands", les fonctions "Tuxedo Commands", "Start/Stop 0o Tuxedo Configuration", "Set up a Tuxedo Application" et "Manage the Listener Processes". Les fonctions sélectionnables "Strart Listener Processes ", "Stop Listener Processes", "Change/Schow Listener Process Parameters", "Schow currently running Listener Processes", "Check consistency of Listener Process scripts with TUXCONFIG Level" et "Update Listener Process to TUXCONFIG Level" apparaissent sur la fenêtre de l'interface graphique (Figure 1). Pour lancer des modules d'écoute, l'administrateur doit sélectionner la commande "Start Listener Processes" en positionnant le curseur de sa souris sur le pavé (11) et en appuyant sur le bouton gauche de sa souris. La fenêtre de la figure 2 apparaît après la sélection. Si une application a été préalablement désignée, son nom est affiché sur le pavé (21). Sinon, I'administrateur est informé par la marque clignotante du curseur qu'il doit en donner une. Pour cela, I'administrateur peut soit cliquer sur le bouton "List" (22) pour afficher la liste des applications enregistrées et en sélectionner une, soit entrer explicitement le nom de l'application désirée. Puis l'administrateur est informé par la marque clignotante du curseur dans le pavé (23), à partir de laquelle il doit préciser le nom des machines sur lesquelles un module d'écoute doit être lancé. De la même façon, la liste des machines comprises dans ladite application peut être obtenue en cliquant sur le bouton "List" (22). Pour valider les machines sélectionnées, par exemple par surbrillance, I'administrateur doit cliquer sur le bouton "OK' (24). La commande de démarrage du module d'écoute est 2773241 obtenue par la sélection du bouton "Command" (25). Le bouton "Reset" (26) permet de réinitialiser les valeurs des pavés (21) et (23). Le bouton "Cancel" (27) permet d'annuler une valeur introduite sur les pavés (21) et (23). Le bouton "?" (28) offre une aide en ligne à l'administrateur. Pour chaque machine désignée dans la liste des machines, l'ordinateur se procure des informations sur l'application dans le fichier de configuration de la machine maître et un fichier historique appelé fichier "tlistenlog. . " contenant des informations sur l'application agissant actuellement sur cette machine. o10 L'ordinateur vérifie d'abord si le module d'écoute n'est pas déjà démarré sur la machine. Si c'est le cas, le message "Listener already running on " est imprimé sur l'écran. Sinon, si un fichier local existe, l'ordinateur l'exécute et imprime le message "Listener started on the machine", si la commande réussit. Si la commande échoue, I'ordinateur imprime le message "Listener starting failed on ". Si le fichier local n'existe pas, I'ordinateur génère un fichier "tlistenlog. . " dans le répertoire APPDIR, l'exécute et rend compte du résultat comme précédemment Ce fichier contient des informations sur l'application courante et sera utilisé dans le prochain lancement des modules d'écoute. Ceci correspond aux lignes 652 à 698 de la page 36 et aux lignes 699 à 719 de la page 37 de l'annexe 2. startlistproc) appname=$1; shifi list="$*" setenviron bouclestatus=O exitstatus-0 for machine in $1ist do echo "\n------- Machine: $machine -------.n" gettuxval > "appname.tux" gettllog ./appname.tux progl=" TUXDIR=$tuxdir; export TUXDIR ROOTDIR=$tuxdir; export ROOTDIR # V4 APPDIR=$appdir; export APPDIR TUXCONFIG=$tuxconfig; export TUXCONFIG PATH=${PATH}:\$TUXDIR/bin:\$APPDR; export PATH LANG=$1ang; export LANG LIBPATH=${LIBPATH}:$tuxdir/lib; export LIBPATH COLUMNS=200; export COLUMNS ps -eF '%u %p %a' j awk '\$3 - \"tlisten\" && \$0 - \"'$nlsaddr\"V' {exit 1}' if[ \$? = 1] then echo \"Listener already running on $machine\"' echo exit 0 exit 0 fi if [ -f $appdir/tlisten.$appname.$machine] then $appdir/tlisten. $appname. $machine ps -eF '%u %p %a'l awk '\$3 \"tlisten\" && \$0 - V'$nlsaddr\" {exit 1}' if[\$?= 1] then echo \"Listener started on $machine\"' echo exit 0 else echo \"Listener starting failed on $machine!!!\" echo exit 1 fi else # create the script file & exec it echo \"$tuxdir/bin/tlisten -d $bridge -1 $nlsaddr -u $uid -L $tllog\" > $appdir/tlisten. $appnamne. $machine chmod ug+x $appdir/tlisten. $appname. $machine $appdir/tlisten. $appname. $machine ps -eF '%u %p %a' [ awk \$3 - \"tlisten\" && \$0 - \"$nlsaddrV\" {exit 1}' if[\$?= 1] then echo \"Listener started on $machine\"V' echo exit 0 else echo \"Listener starting failed on $machine!!!V' echo exit 1 fi fi" #echo "$progl " > prog 1 if [ -z "$uname"] then print "Host $machine nlot found" exit 1 17 2773241 fi rsh "$uname" -I "$ADMIN" "$progl" I awk ' NR = 1 {fine = $0} NR > 1 {print fine; line = $0} END {if(sub("Aexit line)) et ine; print line; exit -1)}' boucle_status=' expr $boucle_status \1 $? done exit $bouclestatus Pour arrêter un module d'écoute, I'administrateur sélectionne à partir du menu principal de gestion des modules d'écoute "Manage the Listener Processes", la fonction "Stop Listener Processes" en positionnant son curseur sur la pavé (12) (Figure 1). La fenêtre de la figure 3 apparaît. Elle i5 permet d'indiquer dans un premier pavé (31), le nom de l'application, dans un second pavé (32), le nom de la ou des machines. En cliquant sur le bouton "List" (33), une liste des applications enregistrées ou une liste des machines concernant chaque application peut être obtenue selon la position de la marque de position clignotante (34). Pour chaque machine de I'application, I'ordinateur imprime le nom de la machine pour laquelle le module d'écoute est arrêté. Cette sélection à l'écran grâce à l'interface graphique lance les pas de programmes "stoplistproc" au cours desquels le programme procure à la station sur laquelle la procédure d'arrêt est lancée, des informations par gettuxval sur l'application, contenue dans le fichier de configuration de la machine maître (Page 37 de l'Annexe 2, Lignes 720 à 762). stoplistproc) appname=$1; shift list="$*" setenviron bouclestatus=O exitstatus=O for machine in $1ist do echo "\n ---- Machine: $machine -------\n" gettuxval > "appname.tux" /appname.tux progl=" COLUMNS=200; export COLUMNS ps -eF '%u %p %a' l awk $3 - \"tlisten\"V' && \$0 - \"$nlsaddr\"V' {print \$2; exit 0}' read pid if [ -n \"\$pid\"] then kill -9 \$pid > /dev/null status=\$? if [ \$status -eq 0] then echo \"Process \$pid killed on $machine\"V' echo exit 0 else echo \"Failed to stop listener on $machine!!!\" echo exit 1 fi else echo \"No Listener running on $machine\" echo exit 1 fi" if [ -z "$uname"] then print "Host $machine not found" exit 1 fi rsh "$uname" -1 "$ADMIN" "$progl" awk' NR = 1 {line = $0} NR > 1 { print line; line = $0} END {if(sub("Aexit ","", line)) exit line; print line; exit -1}' boucle status=' expr $boucle_status \1 $? done exit $bouclestatus Si un processus appelé "tlisten" appartenant à l'application courante est en fonctionnement sur cette machine, I'ordinateur l'arrête (kill) et imprime le message "Process killed on ", sinon il imprime le message "Failed to stop listener on ". De plus, ce procédé d'assistance à l'administration d'une application permet d'afficher des informations concernant un module d'écoute. Pour cela à partir du menu principal de gestion des modules d'écoute "Manage the 19 2773241 Listener Processes", il suffit a l'administrateur de sélectionner la fonction "Change/Show Listener Processes Parameters" sur le pave (13) de la fenêtre présentée en Figure 1. La fenêtre de la figure 4 apparaît. L'administrateur doit préciser dans le pavé (41), le nom de l'application et dans le pavé (42), un nom de machine. Suite à cette précision, les autres pavés (43 à 46) de la fenêtre font apparaître les valeurs des paramètres tels que: - l'identification de l'administrateur (UID), l'adresse complète du module d'écoute composée de l'adresse de io la machine et du numéro de port qu'il utilise (NLSADRR), - le chemin d'accès au réseau, - le chemin d'accès complet au fichier journal du module d'écoute (Listener Logfile Full Path Name, LLFPN), Toutes ces informations sont extraites du fichier TUXCONFIG de la machine maître. Ces informations ne sont pas modifiables par cette commande, à l'exception du LLFPN. L'annexe 2 présente aux lignes 570 à 579 de la page 35, la partie du programme correspondant à l'exécution de la commande de modification du LLFPN. chglisten) appname=$ 1 machine=$2 shift 2 if[ $# -gt 0] then echo "TLLOG $machine $1" > $ConfDir/tlistenlog.$appname.$machine fi exit $? Pour pouvoir visualiser les modules d'écoute actifs de l'application, l'administrateur doit sélectionner la fonction "Show currently running Listener Processes" en cliquant sur le pavé (14) de la fenêtre de la Figure 1. L'ordinateur affiche la liste des machines de l'application sur lesquelles un module d'écoute est actif et l'identification du processus PID (Process 2773241 Identifier) appartenant à la configuration du réseau. L'annexe 2 présente aux lignes 764 à 768 de la page 37 et aux lignes 769 a 809 de la page 38, la partie de programme correspondant à l'affichage de la liste des modules d'écoute actifs, qui utilise la fonction get_tuxval. runninglist) appname=$ 1 bouclestatus=0 setenviron listlmids=gettuxconfig \ sed -e "s/=/ /g" -e 's/"//g' -e 'sA\\V0P -e "s/\*//" awk' BEGIN { network=-0} {line= $0} NF 1 { if(network = 1) print $1} $1 = -NETWORK" { network = 1} END {if{sub("'exit ","", line)) exit line; exit -1 ' for machine in $1ist lmids do gettuxval > "appname.tux" 20../appname.tux progl=" TUXDIR=$tuxdir; export TUXDIR LIBPATH=${LIBPATH}:$tuxdir/ib; export LIBPATH ROOTDIR=$tuxdir; export ROOTDIR # V4 APPDIR=$appdir; export APPDIR TUXCONFIG=$tuxconfig; export TUXCONFIG PATH=$ {PATH}:\$TUXDIR/bin:\$APPDIR; export PATH LANG=$1ang; export LANG COLUMNS=200; export COLUMNS ps -eF '%u %/p %a' awk '\$3 - \"tlisten\" && \$0 - \"$nlsaddr\" {print \$2}' read pid if [ -n \"\$pid\"] then echo \"Listener running on $machine: pid = \$pid\" echo exit 0 else echo \VNo Listener running on $machine\" echo exit 0 fi" if [ -z "$uname"] then print "Host $machine not found" exit 1 fi rsh "$uname" -1 "$ADMIN" "$progl" [ awk' 21 2773241 NR= 1 {ie = $0} NR > 1 { print line; line= $0} END { if(sub("%exit ", "", line)) exit line; print line; exit -1} ' boucle_status='expr $boucle_status \1 $?' done exit $bouclestatus L'administrateur peut aussi vérifier le script d'un module d'écoute. En sélectionnant la fonction "Check consistency of Listener Process scripts with Tuxconfig" sur le pavé (15) de la fenêtre représentée en figure 1, la fenêtre de la figure 5 apparaît. L'administrateur doit entrer le nom d'une application sur le pavé (51) et le nom d'une machine donnée sur le pavé (52). Une liste des applications et des machines est a la disposition de l'administrateur i5 grâce au bouton "List" (53). Le programme compare les informations contenues dans le fichier TUXCONFIG de la machine maître et extraites par la fonction "gettuxval" avec les informations contenues dans le fichier "tlisten.(nom de l'application). (nom de la machine)" situé dans le répertoire APPDIR de la machine et donne le résultat de cette comparaison. L'annexe 2 présente aux lignes 580 à 631 de la page 35 et aux lignes 632 à 651 de la page 36, la partie du programme correspondant à la vérification d'un script d'un module d'écoute qui permet de signaler les discordances entres les paramètres des fichiers en imprimant par exemple pour le pont "BRIDGE values mismatch". chklistscript) appname=$1 machine=$2 setenviron get_tuxval > "appname.tux" gettllog ./appname.tux prog=" if [ -f $appdir/tlisten. $appname.$machine] then cat $appdir/tlisten.$appname. $machine echo \"\\nexit 0V'\" else echo \"\\nexit 1V' fi" if [ -z "$uname"] then print "Host $machine not found" exit I fi rm -f tlscript. $appname.$machine rsh "$uname" -1 "$ADMIN" "$prog" I tee tlscript.$appname.$machine > /dev/null [$? -ne 0] && exit 1 [-s tlscript.$appname. $machine] && cat tlscript.$appname.$machine awk' END { if( $2 = "l")exit-1}' [ $? -eq -1] && exit 1 [ -s tlscript.$appname. $machine] && cat tlscript.$appname.$machine \ awk ' $1 - "tlisten" { mismatch = O fexec=sprintf("%s/bin/tlisten", tuxdir) if ($1!= fexec) { print "tlisten command full pathnames mismatch" printf "\tscript:\t%s\n", $1 printf "\tconfig:\t%s\n", fexec mismatch +=1 } for (i=2; i ≤ NF; i++) { if(( $i =- "-d") && ($(i+1)!= bridge)) { print "BRIDGE values mismatch" printf "\tscript:\t%s\n",$(i+l) printf "\tconfig:\t%s\n",bridge mismatch +=1 } J if(( $i = "-1") && ($(i+ 1)!=nlsaddr)) { print "NLSADDR values mismatch" printf "\tscript:\t%s\n",$(i+ 1) printf "\tconfig:\t%s\n", nlsaddr mismatch += 1 if(( $i = "-u") && ($(i+1)!= uid)) { print "UID values mismatch" printf "\tscript:\t%s\n", $(i+1) printf "\tconfig:\t%s\n",uid mismatch +=1 } if(( Si = "-L") && ($(i+l)!-- =tllog)) { print "LOGFILE values mismatch" printf "\tscript:\t%s\n", $(i+ 1) 23 2773241 printf "\tconfig:\t%/os\n", tlUog mismatch +=1 ) END{ if ( mismatch = 0) printf "Script File is up-to-date for %s\n",machine else printf"\nScript File is NOT up-to-date for %s\n",machine } 'tllog=$tllog machine=$machine bridge=$bridge \ nlsaddr-$nlsaddr uid=$uid tuxdir=$tuxdir exit $? Un script d'un module d'écoute peut aussi être mis à jour par la sélection de la fonction "Update Listener Process scripts to TUXCONFIG Level". Un script d'un module d'écoute Tuxedo permet de lancer un module d'écoute. Il suffit d'intégrer un script de ce type pour une machine donnée, dans la séquence de lancement pour que le module d'écoute soit lancé automatiquement en même temps que la machine. Dans la fenêtre représenté figure 6, I'administrateur entre sur le pavé (61) le nom d'une application, et sur le pavé (62) le nom d'une ou de plusieurs machines. Le programme se procure par l'appel de la sous routine "get_tuxval", toutes les informations dont il a besoin dans le fichier binaire de configuration extraites par la sous routine "gettuxconfig" et crée un fichier lui correspondant dans le répertoire APPDIR sous le nom "tlisten. (nom de l'application).(nom de la machine). Les lignes 810 à 831 de l'annexe 2 page 38 présente la partie du programme correspondant à l'exécution de la commande de mise à jour d'un script d'un module d'écoute. updtlistscript) appname=$1 machine=$2 setenviron gettllog gettuxval > "appname.tux" /appname.tux prog=" echo \"$tuxdir/bin/tlisten -d $bridge -1 $nlsaddr -u $uid -L $tllog\"V' > $app dir/tlisten. $appname. $machine chmod ug+x $appdir/tlisten.,$appname.$machine echo exit \$?" if [ -z "$uname"] then print "Host $machine not found" exit 1 fi rsh "$uname" -1 "$ADMIN" "$prog" awk' NR== 1 {line= $0} NR > 1 { print line; line = $0} END {if(sub("Aexit ", "", line)) exit line; print line; exit -1}' exit $? D'autres modifications à la portée de l'homme de métier font également partie de l'esprit de l'invention. 0') C'I out 't. [.' EV Z[ (-.- Z 2 z i X E tx h 00 @ I-, 4:>E >O, 4>çD 4W 4X U0ijX r - O O> = V. -, C * 0Q Xi 0 0 X X4 0 4>0XX 0 043â a v vE d v v:s a v vn a v -vuJ.-> 0w : -o o-o a lao 0ao OX a ao a 9 c) s X a>-" X as ^-vdo v+X J nS H 1 tq, O). '4>0-.C>.21s4>0 s4>0I l, o3( Xa 80 di lu 40 X 8axX OU Ol OJ U' '(r,0t. 0 - z 0xEaci0)A:kEvCeEJ.41 tcEE"ws1o ôoQ z 8 - x De 8: c 8: =u)>x>Di: V.. '' 1> O,V- - HU U- _H U 1V _>HUVJiJi-4-H 1 11O VV OV 2 i- o 5 oo. 1s aIl Il= o- -If Il.r =u nX 1 o W a X - 'uI [OFi D -lu duzla go O:Uz::29 z i o) 1G01l o 0f fin C1:ot 4>-r-IaO 4>''t4,4 WVV ld,> 4>''la.-, >'OV ru 4>-o-l 'a H H D H - -4-d HO O-. -l Hi DxD H H O1 H aXQX>È aXX>aMX>u>Xaz.->r.munZ4CHxH Il"a X 311C ?V Z) m 0 0 0:l HIlO-l.lHOOZI-IHOHOIl HO-lD.11l1010 re>- -I OOOaE..C 0o" 2"2:s2 rE,o 3z o. ( 3 0 0 CD H>3.. Ol Ic.>O 4-.X OHSL0(>-lOH.3H. c>. xc C' U) Lnw O ZO.4 il.2>, OaD.Z.-M.2n m3.C> J> OO a0.I4 o.n -..-:I>.-)E z (3->3.2)(IlCI U> )(; 'J 'U g F'n r. n r.>'> :) m Wà W4 ZJ W rso 4cri cr3r3 4finZS cr Y> Orac.H>(u nI Z(. WD>: v u 9n Og4 rra: 1Il nwcx. -0E.>E.J Jl.*. 4a.N c i,l.Oci.Cit 4>z DDr), ,r-.1-IO.ty.> zc eC4 ûmC4 >E.>Od *.2-- 4E-tID14El O. * 0(3_ r,>C. o Z.-i--t.o c.xlt r {-caoxrr-.,.,J($O 4}*#11-2-.1f4f1 ,rUru-unDDDDDv'Z'r 00 b *} t, JII 0 _ O0lll t_ 0 0 t-J II t_ 0_0t_ t- t- > _ t- t_ t-.O) I 0,D w II OD W: IDX-I JO J: II ' -J -1 LQ '/, w J" t I P) ti IV t, 1xel tO t('JV FI 1 - t- 1I-t- 1 1 - O 0a J ae s s10.t _: - O)Ir _ Z o pe z o O[)c- t':) J-O O l l >0 a>l IJ I, O 0 ". Ol tD 0' o - U- ' W t) 1 C' 50 "- II Itn) I1O [- O o @ & 4 D z-.QtQ - 0" D'o t hú I)V I.-,.C o ' l)l>.mll io l) o) o tu Z - 1 ZO W Z e-V ZIU W Z t-IV ZS W t'OV 1 0M>0 00-0>-o00r 0c 0 0 r oorovo oro:o oro 0oo oa 0>1inFU) 1 Fs0(o F on 00 >a Do >t Or,> r, E a D r,>'fD( 0U- ' XI 000) û0'c - - - O ru t!.i[!. CiIl tg'il -t 1D D r11 D OD1 11 D1 1 0 IL 0 00, 0 0 lxPDCiO0CL00 0 m 0? 0C i m'c I " Fi 3= C 01 30 F 31) 3 *FFi 3a3:i >.. X va.-U3-5 b Co oa I-I- a (OsD (D o.- c C o 0 t.ID CD '. oD It n e- Il t il Il Wt Il il le 'LI) t0 t - t C FU VI 1lé F Ln t,) -n b-- - i- Ln1 t U t F CD IL CoD)-n coco- F-o 0CD o-in t-t-O'FW t -l--F\ IlC--b-W Ota CD.P- oeDoenroe a>,r a> X0 XoX In un w IDoCD- IDoce- OO O O O O OO C C OO O O O O OO C> IC OO O O O o O o ú5 N Oo O O O O O O I I. OO O O O O OO No N OO O O O O O O OO O O O O OO Io o o O OO O O OII_ OO O O O O O O_ OO O Ooo o o__ )0 0 a CD0 O 0 ODCDO 0 CDe> ODCD 00 0 C) a : CD.C. D CD CD CD( 27 2773241 ANNEXE 2 2 # @BULLCOPYRIGHT@ 3 # 4 # HISTORY # SLog: smtuxadmin.ksh,v $ 6 # Revision 1.7 1996/02/12 11:40:49 odeadm 7 # bci VlSet2C 23.01.96 8 # [1996/01/23 14:31:07 dia] 9 # # Revision 1.6 1995/12/20 14:26:59 odeadm 11 # V1 Set2: Still troubles with smtuxadmin.ksh 12 # [1995/12/11 11:56:55 odeadm] 13 # 14 # 07.12.95 VlSet2 first batch of corrections # [1995/12/07 17:22:57 odeadm] 16 # 17 # *** empty log message *** 18 # [1995/11/30 13:48:30 dia] 19 # # *** empty log message *** 21 # [1995/11/30 13:48:30 dia] 22 # 23 # Revision 1.5 1995/10/13 11:52:51 odeadm 24 # Servers TMS/Partitioned mach. # [1995/10/09 12:05:57 dia] 26 # 27 # Revision 1.4 1995/09/15 15:15:06 odeadm 28 # Corrections MRs BUILD 3 29 # [1995/09/07 15:45:27 dia] # 31 # Revision 1.3 1995/08/24 13:38:03 odeadm 32 # Build3 33 # [1995/08/23 09:04:31 odeadm] 34 # # Revision-1.2 1995/07/19 15:18:13 odeadm 36 # Madison build M0.2 37 # [1995/07/10 10:01:58 odeadm] 38 # 39 # $EndLogS #! /bin/ksh 41 ConfDir=$WRAPPING CONFIGURATION 42 Context=smtuxedo.ctx 43 Scanconf=$MADISONVAR/surveyor/scanconf.tux 44 V5 to V4='ROOTDIR=$TUXDIR; export ROOTDIR' Setl to Set2='[ -z "$ADMIN"] && export ADMIN="madison"' 46 cmd=$1; shift 48 set environ() 49 MASTER=""; APPDIR=""; ADMIN="" filename=$ConfDir/$appname.tux 51 Env='tuxgetenv -k -v APP PW $filename "! 52 tuxgetenvp 53! 54 eval "$Env"; unset APP PW eval "$Setl to Set2" 56 if [ -n "$MASTER" -a -n "$APPDIR"] 57 then 58 Env="$Env 59 $PW $Setl to Set2 61 $V5 to V4"' 62 LD LIBRARYPATH=$LIBPATH; export LD_LIBRARYPATH; 63 cd $APPDIR 64 PATH=$(PATH):.:$APPDIR:$TUXDIR/bin; export PATH' return 0 66 fi 67 exit 1 68) remote cmd() { 71 prog="$Env 28 2773241 72 $cmd"' 73 status-$? 74 sleep 1 echo "\nexit $status" 77 #print -r "$prog" > prog 78 rsh "$MASTER" -l "$ADMIN" "$prog" I awk ' 79 NR == 1 (line - $0) NR > 1 ( print line; line = $0) 81 END (if(sub("^exit ","", line)) exit line; exit -1}' get tuxconfig() 86 if [ -s tuxconf.tmp.$appname] 87 then 88 cat tuxconf.tmp.$appname 89 else rm -f tuxconf.tmp.* 91 prog- "$Env'' 92 $TUXDIR/bin/tmunloadcf 93 echo "\nexit $?" #print -r "$prog" > prog 96 rsh "$MASTER" -1 "$ADMIN" "$prog" I tee tuxconf.tmp.$appname 97 fi 98 get_tlistenlog 99) 101 gettlistenlog() { 102 tllogfname=$ConfDir/tlistenlog.$appname. $machine 103 if [ -s $tllogfname] 104 then cat $tllogfname 106 else # default value 107 echo "TLLOG $machine $MADISONTMP/tlisten. $appname.$machine.log" I tee $tllogfname 108 fi 109 echo "\nexit $?" ) 112 get tuxval() { 113 get_tuxconfig I \ 114 sed -e "s/=/ /g" -e 's/"//g' -e 's/\\\\/0/g' I awk ' BEGIN ( 116 tuxconfig section["*RESOURCES"] = 1 117 tuxconfigsection["*MACHINES"] = 2 118 tuxconfig_section["*GROUPS"] = 3 119 tuxconfig_section["*SERVERS"] - 4 tuxconfigsection["*SERVICES"] - 5 12 tuxconfig_section["*ROUTING"] = 6 122 tuxconfig section["*NETWORK"] = 7 123) 124 NF == 1 l if ( $1 in tuxconfig section) { 126 section = tuxconfig_section[$1] 127 next section == 2 && $2 = "LMID" { # MACHINES section 131 if ( $3 -= machine) { 132 printf "uname=%s\n", $1 133 mach found=l 134) else { # reset mach found for furtheur machines 136 mach found = 0 137) 138 next section == 2 && $1=="APPDIR" && mach found==l 141 printf "appdir-%s\n", $2 142 appdir - $2 29 2773241 143 next 144} section = 2 && $1=="TUXCONFIG" &&machfound - 1 146 printf "tuxconfig-%s\n", $2 147 next 148) 149 section == 2 && $1-="TUXDIR" && mach found=-1 ( printf "tuxdir=%s\n", $2 151 next 152} 153 section == 2 && $1=-"ROOTDIR" && mach found==1 ( # for V4 154 printf "tuxdir=%s\n", $2 next 156) 157 section == 2 && $1=-"ULOGPFX" && mach found=-1 ( 158 ulogpfx=l; printf "ulogpfx=%a\n", $2 159 next 161 section == 7 && NF == 1 ( 162 if ( $1 == machine) 163 {machfound = 1) 164 else { # reset mach found for other machines mach found = 0 166} 167 next 169 section == 7 && $1=="NLSADDR" && mach found-=l { printf "nlsaddr=%s\n", $2 171 next 173 section == 1 && $1 == "UID" {printf "uid-%s\n", $2;next 174 section == 7 && $1=="BRIDGE" && mach found=-1 ( printf "bridge-%s\n", $2} 176 END { # not defined ulogpfx 177 if ( ulogpfx == 0) { 178 printf "ulogpfx=%s/ULOG\n", appdir} 179) ' machine=$machine appname-$appname lang='sed -e "s/=/ /g" -e "s/'//g" -e "s/;/ /" $ConfDir/$appname. tux I awk ' 181 $1 == "LANG" (printf "lang=", $2}' 184 get tllog() { tllogfname="$ConfDir/tlistenlog.$appname.$machine" 186 if [ - f $tllogfname] 187 then 188 tllog='cat $tllogfnamelawk '$1 -== "TLLOG" && $2 == machine { print $3}' machine=$m achine' 189 else tllog-"$MADISON_TMP/tlistenlog.$appname.$machine" 191 echo "TLLOG $machine $tllog" > $tllogfname 192 fi 196 case $cmd in 197 appli) 198 is -1 $ConfDir 2> /dev/null I awk ' 199 sub(".tux$", "", $NF) (print $NF}' ;; 201 isexist) 202 if [ -f $ConfDir/$1.tux] 203 then 204 echo "Yes" 205 else 206 echo "No" 207 fi 208;; 209 setparam) 210 [! -d $ConfDir] && mkdir -p $ConfDir 211 if f -n "$2"] 212 then 2773241 213 filename=$ConfDir/$2.tux 214 while [ $# -gt 0] 215 do 216 echo "$1-\"$2\"; export $1" 217 shift 2 218 done > $filename 219 fi 220;; 221 discover) 222 [ -z "$1"] && exit 1 223 filename=$ConfDir/$1.tux; shift 224 if [ -f $filename] 225 then 226 # sed -e 's/:/Q@@/g' -e 's/#.*//' -e 's/ *; */"/g' $filename/ I awk ' 227 sed -e '/#.*//' -e 's/ *; */"/g' -e 's/:/#!:/g' $filename/ I awk ' 228 BEGIN ( field = "#promptW:promptP:promptPO:promptS:promptA:pr omptM:promptC:promptR:promptF"; value="::::::::" 229 /\/ { 230 for (i=l; i≤ NF; i++) { 231 if(sub("=$", "', $i)) { 232 separator "" 233 field = field separator $i 234 value - value separator $(i+1) 235) 238 END { 239 print field; print value 240 i' FS='"' 241 else 242 print '#\n' 243 fi 244;; 245 delappname) 246 if [ -n "$2"] 247 then 248 filename-$ConfDir/$2.tux 249 if [ -f $filename] && grep -q "$1=['\"]*$2" $filename 250 then 251 rm -f $filename $(filename}p 252 else 253 echo 'The file does not exist' 254 echo ' or' 255 echo 'The file is not an environment file' 256 exit 1 257 fi 258 fi 259;; 260 select) 261 if [ -n "$2"] 262 then 263 echo "$1='$2'; export $1" > "$Context" 264 fi 265;; 266 deselect) 267 rm -f "$Context" 268;; 269 selected) 270 APPNAME="" 271 [ -f $Context] &&. ./$Context 272 echo "$1$APPNAME" 273;; 274 isselected) 275 rm -f tuxconf.tmp.* 276 [ -f $Context] && fgrep -q "APPNAME=" $Context && shift 277 echo $1 278; 279 loadcf) 280 appname=$1 31 2773241 281 bouclestatus=0 282 cmd="\$TUXDIR/bin/tmloadcf -y $2 $3" 283 set environ 284 echo "---- Loading Configuration Binary File ---" 285 remote cmd 286 status=$? 287 if [ $status - ne 0] 288 then 289 exit $status 290 else 291 # maj fichier $Scanconf.tux machines 292 prog="$Env"' 293 $TUXDIR/bin/tmunloadcf 294 echo "\nexit $?" 296 #print - r "$prog" > prog 297 rsh "$MASTER" -l "$ADMIN" "$prog" > tuxconf. tmp.$appname 298 list lmids-'cat tuxconf.tmp.$appname I sed -e "s/-I /g" -e 's/"//g' -e "s/\ I awk ' 299 {line = $0) 300 $2 == "LMID" && machine -- 1 (lmids lmids $3 " "; next) 301 $1 == "GROUPS" && $2 = "" { machine-0; next) 302 $1 == "MACHINES" && $2 == "" { machine = 1; next) 303 END {if(sub("^exit "", o, line)) { 304 print lmids 305 exit line) 306 exit -1)' 307 for machine in $1ist lrmids 308 do 309 echo "---- Updating $Scanconf on $machine ----\n" 310 get_tuxval > "appname.tux" 311. ./appname. tux 312 logprefix='echo $ulogpfx I sed -e 's./..g' I awk ' 313 {print $NF} ' 314 log dir='echo $ulogpfx I sed - e 's./..g' I awk ' 315 {for (i-1; i 1 { print line; line $0) 326 END {if (sub("^exit ", "", line)) exit line; exit -1}' 327 boucle_status-'expr $boucle_status + $? 328 done 329 fi 330 exit $boucle status 331;; 332 apppwd) 333 filename=$ConfDir/$1.tuxp 334 echo "Enter Application Password: \c" 335 OLDCONFIG='stty - g 336 stty -echo 337 read APPPW 338 echo "\nRe-enter Application Password: \c" 339 read APP PW 1 340 stty $OLDCONFIG 341 if [ $APPpw - "$APPPW"!APP-PW_1"] 342 then 343 echo "\n\nPassword mismatch!" 344 echo "Enter any character to exit and retry" 345 read 346 else 347 # PWencode "APP PW-\"$APP PW\"; export APP PW" > $filename 348 # APPPW='cho $APP PW I sed -e "s/'/'"'\"'/g" 349 # PWencode "APP PW-'$APPPW'; export APP PW" > $filename 350 tuxgetenv -s > $filename "! 32 2773241 351 tuxgetenvp 352 $APPPW 353! 354 fi 355;; 356 chksyntx) 357 appname=$1 358 cmd-"\$TUXDIR/bin/tmloadcf -n $2" 359 set environ 360 remote cmd 361 exit $? 362;; 363 dispIpc) 364 appname=$1 365 cmd="\$TUXDIR/bin/tmloadcf -c $2" 366 set environ 367 remote cmd 368 exit $S? 369;; 370 machine network) 371 appname-$1 372 setenviron 373 get tuxconfig I \ 374 sed -e "s/=/ /g" -e 's/"//g' -e 's/\\//' -e "s/\*//" I awk ' 375 BEGIN { network=0) 376 {line - $0) 377 NF == 1 ( if (network - 1) print $1) 378 $1 _= "NETWORK" { network = 1) 379 END (if(sub("^exit ","", line)) exit line; exit -1)' 380 exit $? 381;; 383 machine machines) 384 appname=$1 385 setenviron 386 gettuxconfig I \ 387 sed -e "s/=/ /g" -e 's/"//g-e s\\' -e 's/\\//' -e "s/\*//"awk ' 388 BEGIN ( machine=0 389 (Uline $0) 390 $2 == "LMID" { if(machine =- 1) print $3) 391 $1 2 "GROUPS" ( if( $2 == "") machine-O) 392 $1 = "MACHINES" ( if( $2 - "") machine 1) 393 END {if(sub("^exit ", "", line)) exit line; exit -1)' 394 exit $? 395;; 396 group) 397 appname=$1 398 set environ 399 get tuxconfig I \ 400 sed -e "s/=/ /g" -e 's/"//g' -e 's/\\//' -e "s/\*//" I awk ' 401 BEGIN ( group=0) 402 {line = $0) 403 $1 == "SERVERS" { group=0 O 404 $1 -- "GROUPS" { if($2 -- "") group=1) 405 $2 -= "LMID" && $4 -- "GRPNO" { if(group) print $1) 406 END (if(sub("^exit ","", line)) exit line; exit -1}' 407 exit $? 408;; 409 svrname) 410 appname=$1 411 setenviron 412 gettuxconfig I \ 413 sed - e "s/=/ /g" -e 's/"//g' -e 's/\\//' -e "s/\*//" I awk ' 414 BEGIN { group-server-nb of distinctsvrname=0) 415 {line - $0) 416 $1 == "TMSNAME" { if ( group -- 1) { 417 trouve = 0 418 if (nb of distinct svr name 0) 419 nb of distinct svr name=l 420 svr names[nb ofdistinctsvrname] - $2 421 print $2 422) else { 423 for (j=l; j≤ nb of distinct svr name; j++) { 424 if ( $2 == svr names[j]) ( 425 trouve=1 426) 427} 428 if (trouve == 0) { 429 nb of distinct svr name + 1 430 svr names[nb_of distinct_svr name] = $2 431 print $2 432) 433) 434) 435} 436 $1 == "SERVERS" { if ($2 == "") 437 server=1 438 group=-0) 439) 440 $1 -= "SERVICES" { if ($2-- "") server=O) 441 $1 =- "GROUPS" { if ($2 =- "") group-1) 442 $2 =- "SRVGRP" { 443 if((server == 1) && ( $4 -- "SRVID")) { 444 trouve = 0 445 if (nb of distinct svr name =- 0) 446 nb of distinct svr-name = 1 447 svr names[nb_of distinct svrname] = $1 448 print $1 449} else ( 450 for(j=1; j≤ nb of distinct svr name; j++) { 451 if ( $1 =- svr names[j]) { - 452 trouve=l 453 1 454} 455 if(trouve == 0) { 456 nb of distinct svr name + 1 457 svr names[nb of distinctsvr name] = $1 458 print $1 459) 460) 461) 462} 463 END {if(sub("^exit ","", line)) exit line; exit -1)' 464 exit $? 465;; 466 svrseq) 467 appname=$1 468 set environ 469 get tuxconfig I \ 470 sed -e "s/l/ /g" -e 's/"//g' -e 's/\\//' -e "s/\*//" I awk ' 471 BEGIN ( server-0; nbof distinct svr seq=O} 472 {li(ne = $0) 473 $1 == "SEQUENCE" && server == 1 474 trouve = 0 475 if (nb of distinct svrseq == 0) { 476 nb of distinct svr seq=1 477 svrseqs[nbofdistinctsvrseq] - $2 478 print $2 479} else { 480 for (j=l; j 34 2773241 493 $1 == "SERVICES" ( if($2 == "") server=0) 494 END (if(sub("^exit ",", line)) exit line; exit -1)' 495 exit $7 496;; 497 svrId) 498 appname-$l 499 setenviron 500 gettuxconfig I \ 501 sed -e "s/=/ /g" -e 's/"//g' -e 's/\\//' -e "s/\*//" I awk ' 502 BEGIN ( server=0; nb of distinctsvr Id-0 503 (line - $0> 504 $2 == "SRVGRP" && $4 -- "SRVID" && server -= 1 505 trouve = 0 506 if (nb of distinct svr Id -- 0) { 507 nbof distinct svr Id-1 508 svrIds[nb of distinctsvrId] - $5 509 print $5 510) else { 511 for (j=l; j≤ nbofdistinctsvrId; j++) 512 if ( $5 =- svr Ids(j]) { 513 trouve=l 514) 515) 516 if (trouve -- 0) ( 517 nb of distinct svr Id += 1 518 svrIds[nrb ofdistinctsvrId] - $5 519 print $5 520} 521} 522} 523 $1 == "SERVERS" ( if($2 -- "") server-l} 524 $1 == "SERVICES" { if($2 5- "") server=0} 525 END {if(sub("^exit ","", line)) exit line; exit -1}' 526 exit $? 527;; 528 discover conf) 529 machine=$2 530 appname-$1 531 set environ 532 gettuxconfig I \ 533 sed -e "s/=/ /g" -e 's/"//g' -e 's/\\\\/0/' -e "s/\*//" I awk 534 BEGIN {field - "#"} 535 {line - $0) *536 $1 -= "UID" { 537 field - field separator $1 538 value = value separator $2 539 separator = ":" 540} 541 $1 == "GID" { 542 field = field separator $1 543 value - value separator $2 544 separator - "" 545} 547 $1 -= "BRIDGE" && network == 1 && mach found == 1 548 field - field separator $1 549 value = value separator $2 550} 551 $1 -- "NLSADDR" && network == 1 && mach found == 1 { 552 field - field separator $1 553 value = value separator $2 554 network - 0 555 mach found - 0 556} 557 $1 =- "TLLOG" && $2 == machine { 558 field - field separator $1 559 value - value separator $3 560} 562 $1 == machine (machfound = 1) 563 $1 == "NETWORK" ( network = 1) 564 END { 565 print field; print value 566 if(sub("^exit ", "", line)) exit line; exit -1 567)' "machine=$machine" 568 exit $? 569;; 570 chglisten) 571 appname-$1 572 machine=$2 573 shift 2 574 if [ $# - gt 0] 575 then 576 echo "TLLOG $machine $1" > $ConfDir/tlistenlog.$appname.$machine 577 fi 578 exit $? 579;; 580 chklistscript) 581 appname=$1 582 machine-$2 583 set environ 584 gettuxval > "appname.tux" 585 get tllog 586. ./appname.tux 587 prog=" 588 if [ -f $appdir/tlisten.$appname.$machine] 589 then 590 cat $appdir/tlisten. $appname.$machine 591 echo \"\\nexit 0\" 592 else 593 echo \"\\nexit 1\" 594 fi" 595 if [ -z "$uname" 596 then 597 print "Host $machine not found" 598 exit 1 599 fi 600 rm -f tlscript.$appname.$machine601 rsh "$uname" -1 "$ADMIN" "$prog" I tee tlscript.$appname.$machine > / dev/null 602 $? -ne 0] && exit 1 603 [ -s tlscript. $appname.$machine] && cat tlscript.$appname.$machine I awk ' 604 END ( if ( $2 - "1") exit -1) ' 605 [ $? - eq -1] && exit 1 606 [ -s tlscript.$appname.$machine] && cat tlscript.$appname.$machine I 607 awk ' 608 $1 "tlisten" { 609 mismatch = O 610 fexec=sprintf("%s/bin/tlisten", tuxdir) 611 if ($1!= fexec) ( 612 print "tlisten command full pathnames mismatch" 613 printf "\tscript:\t%s\n", $1 614 printf "\tconfig:\t%s\n", fexec 615 mismatch ±1 616} 617 for (i-2; i 36 2773241 632 printf "\tscript:\t%s\n", $(i+l) 633 printf "\tconfig:\t%s\n",uid 634 mismatch ±l 635) 636 if {{ $i -- "-L") && ($(i+1) -tllog) { 637 print "LOGFILE values mismatch" 638 printf "\tscript:\t%s\n", $(i+1) 639 printf "\tconfig:\t%s\n", tllog 640 mismatch +=1 641} 643 END 644 if ( mismatch == 0) 645 printf "Script File is up-to-date for %s\n",machine 646 else 647 printf "\nScript File ia NOT up- to-date for %s\n",machine 648) ' tllog-$tllog machine-$machine bridge=$bridge \ 649 nlsaddr-$nlsaddr uid- $uid tuxdir=$tuxdir 650 exit $? 651; 652 startlistproc) 653 appname=$l1; shift 654 list="$*" 655 set environ 656 bouclestatus-0 657 exit status=0 658 for machine in $1ist 659 do 660 echo "\n------- Machine: $machine -------\n" 661 gettuxval > "appname.tux" 662 get_tllog 663. ./appname.tux 664 progl=" 665 TUXDIR=$tuxdir; export TUXDIR 666 ROOTDIR-$tuxdir; export ROOTDIR # V4 667 APPDIR=$appdir; export APPDIR 668 TUXCONFIG- $tuxconfig; export TUXCONFIG 669 PATH=$(PATH):\$TUXDIR/bin:\$APPDIR; export PATH 670 LANG=$1ang; export LANG 671 LIBPATH- $(LIBPATH):$tuxdir/lib; export LIBPATH 672 COLUMNS=200; export COLUMNS 673 ps -eF '%u %p %a' I awk '\$3 - \"tlisten\" && \$0 \"$nlsaddr\" exit 1)' 674 if [ \$? = 1] 675 then 676 echo \"Listener already running on $machine\" 677 echo exit 0 678 exit 0 79 fi 680 if [ -f $appdir/tlisten. $appname.$machine] 681 then 682. $appdir/tlisten. $appname.$machine 683 ps -eF '%u %p %a' I awk '\$3 - \"tlisten\" && \$0 \"$nls addr\" (exit 1)' 684 if [ \$7 = 1] 685 then 686 echo \"Listener started on $machine\" 687 echo exit 0 688 else 689 echo \"Listener starting failed on $machine!!!\" 690 echo exit 1 691 fi 692 else # create the script file & exec it 693 echo \"$tuxdir/bin/tlisten -d $bridge -l $nlsaddr -u $uid -L $tllog\" > $appdir/tlisten.$appname.$machine 694 chmod ug+x $appdir/tlisten.$appname.$machine 695. $appdir/tlisten. $appname.$machine 696 ps -eF '%u %p %a' I awk '\$3 - \"tlisten\" && \$0 \"$nlsadd r\" (exit 1)' 697 if [ \$? = 1] 698 then 37 2773241 699 echo \"Listener started on $machine\" 700 echo exit 0 701 else 702 echo \"Listener starting failed on $machine!!!\"IV 703 echo exit 1 704 fi 705 fi" 706 #echo "$progl" > progl 707 if [ -z "$uname"] 708 then 709 print "Host $machine not found" 710 exit 1 711 fi 712 rsh "$uname" -l "$ADMIN" "$progl" I awk ' 713 NR == 1 (line - $0} 714 NR > 1 { print line; line - $0) 715 END {if (sub("^exit ",", line)) exit line; print line; exit -1)' 716 bouclestatus='expr $bouclestatus \1 $? 717 done 718 exit $boucle_status 719;; 720 stoplistproc) 721 appname=$1; shift 722 list="$*" 723 set environ 724 bouclestatus=0 725 exit status=0 726 for machine in $1ist 727 do 728 echo "\n------- Machine: $machine -------\n" 729 get tuxval > "appname.tux" 730.7appname.tux 731 progl-" 732 COLUMNS-200; export COLUMNS 733 ps -eF '%u %p %a' I awk '\$3 \"tlisten\" && \$0 \"$nlsaddr\" {print \$ 2; exit 0}' I read pid 734 if [ -n \"\$pid\"] 735 then 736 kill -9 \$pid > /dev/null 737 status=\$? 738 if [ \$status -eq 0] 739 then 740 echo \"Process \$pid killed on $machine\" 741 echo exit 0 742 else 743 echo \"Failed to stop listener on $machine!!!\" 744 echo exit 1 745 fi 746 else 747 echo \"No Listener running on $machine\" 748 echo exit 1 749 fi" 750 if [ -z "$uname"] 751 then 752 print "Host $machine not found" 753 exit 1 754 fi 755 rsh "$uname" -l "$ADMIN" "$progl" I awk ' 756 NR == 1 (line = $0} 757 NR > 1 ( print line; line = $0) 758 END {if(sub("^exit ", "", line)) exit line; print line; exit -1)' 759 boucle status- 'expr $bouclestatus \l $? 760 done 761 exit $bouclestatus 762;; 764 runnringlist) 765 appname=$1 766 boucle status-0 767 setenviron 768 list lmids='get_tuxconfig I \ 38 2773241 769 sed -e "s/=/ /g" -e 's/"//g' -e 's/\\\\/O/' -e "s/\*//" I awk ' 770 BEGIN { network-0 771 (line $0) 772 NF ==1 { if (network == 1) print $1) 773 $1 == "NETWORK" ( network - 1) 774 END {if(sub("^exit ","", line)) exit line; exit -1}' 775 for machine in $1istlmids 776 do 777 get_tuxval > "appname.tux" 778. . /appname.tux 779 progl=" 780 TUXDIR=$tuxdir; export TUXDIR 781 LIBPATH=$(LIBPATH):$tuxdir/lib; export LIBPATH 782 ROOTDIR=$tuxdir; export ROOTDIR # V4 783 APPDIR=$appdir; export APPDIR 784 TUXCONFIG=$tuxconfig; export TUXCONFIG 785 PATH$(PATH):\$TUXDIR/bin:\$APPDIR; export PATH 786 LANG=$1ang; export LANG 787 COLUMNS=200; export COLUMNS 788 ps -eF '%u %p %a' I awk '\$3 - \"tlisten\" && \$0 \"$nlsaddr\" {print \$2}' I read pid 789 if [ -n \"\$pid\"l'] 790 then 791 echo \"Listener running on $machine: pid = \$pid\" 792 echo exit 0 793 else 794 echo \"No Listener running on $machine\" 795 echo exit 0 796 fi" 797 if [ -z "$uname"] 798 then 799 print "Host $machine not found" 800 exit 1 801 fi 802 rsh "$uname" -1 "$ADMIN" "$progl" I awk ' 803 NR == 1 (line = $0) 804 NR > 1 ( print line; line - $0) 805 END { if (sub("^exit ", I"", line)) exit line; print line; exit -1) ' 806 bouclestatus='expr $boucle status \l $?' 807 done 808 exit $boucle_status 809;; 810 updtlistscript) 811 appname-$1 812 machine=$2 813 setenviron 814 gettllog 815 gettuxval > "appnamne.tux" 816. ./appname.tux 817 prog=" 818 echo \"$tuxdir/bin/tlisten -d $bridge -1 $nlsaddr -u $uid -L $tllog\" > $app dir/tlisten.$appname.$machine 819 chmod ug+x $appdir/tlisten.$appname.$machine 820 echo exit \$?" 821 if [ -z "$uname"] 822 then 823 print "Host $machine not found" 824 exit 1 825 fi 826 rsh "$uname" -1 "$ADMIN" "$prog" I awk ' 827 NR == 1 (line = $0} 828 NR > 1 ( print line; line - $0 829 END (if(sub("^exit ","", line)) exit line; print line; exit -1)' 830 exit $? 831;; 832 tuxBootEnt) 833 appname=$1; shift 834 cmd-"\$TUXDIR/bin/tmboot -y $@" 835 set environ 836 remote cmd 837 exit $7 -39 2773241 838;; 839 tuxShutEnt) 840 appname=$1; shift 841 cmd="\$TUXDIR/bin/tmshutdown -y" 842 set environ 843 remotecmd 844 exit $? 845;; 846 tuxBootAllMach) 847 appnamne-$1; shift 848 cmd="\$TUXDIR/bin/tmboot -y -A $@" 849 set environ 850 rermote cmd 851 exit $? 852;; 853 tuxShutAllMach) 854 appname=$1; shift 855 cmd="\$TUXDIR/bin/tmshutdown -y -A $@" 856 set environ 857 remote cmd 858 exit $? 859;; 860 tuxShut) 861 appname=$1; shift 862 cmd="\$TUXDIR/bin/tmshutdown -y $@" 863 set environ 864 remote cmd 865 exit S? 866;; 867 tuxShutAdmMast) 868 appname=$1; shift 869 cmd-"\$TUXDIR/bin/tmshutdown -y -M $@" 870 set environ 870 remote cmd 872 exit $? 873;; 874 tuxShutSvrSect) 875 appname=$1; shift 876 cmd="\$TUXDIR/bin/tmshutdown -y -S $@" 877 set environ 878 remotecmd 879 exit s? 880;; 881 tuxBootAdmMast) 882 appnarae=$1; shift 883 cmd="\$TUXDIR/bin/tmboot -y -M $@" 884 set environ 885 remote cmd 886 exit S? 887;; 888 tuxBoot) 889 appname=$1; shift 890 cmd="\$TUXDIR/bin/tmboot -y $@" 891 set environ 892 remote cmd 893 exit $? 894;; 895 tuxShutdown) 896 appname=$2 897 cmd- "\$TUXDIR/bin/tmshutdown -y $1" 898 set environ 899 remote cmdc 900 exit S? 901;; 902 tuxBootSvrSct) 903 appname=$1; shift 904 cmd="\$TUXDIR/bin/tmboot -y -S $8" 905 set environ 906 remotecmd 907 exit S? 908;; 2773241 909 tuxBootBBL) 910 #echo $* 911 appname=$1; shift 912 cmd="-\$TUXDIR/bin/tmboot -y $@" 913 set environ 914 remote cmd 915 exit $? 916;; 917 tuxShowBooted) 918 appname-$1; shift 919 cmd="(echo psr; echo quit)I\$TUXDIR/bin/tmadmin" 920 set environ 921 remotecmd 922 exit $7 923;; 924 tuxminlPC) 925 appname=$1; shift 926 cmd-"\$TUXDIR/bin/tmboot -y -c $@" 927 set environ 928 remote cmd 929 exit $? 930;; 931 tuxShutPart) 932 exit status=0 933 appname-$1; 934 machine-$2; shift 935 set environ 936 gettuxconfig I \ 937 sed -e "s/-/ /g" -e 's/"//g' -e 's/\\//' -e "s/\*//" I awk ' 938 $1 == "APPDIR" && mach section -- 1 && mach found == 1 { 939 print "APPDIR " $2 > "appname.tux" 940 mach section - 0 941 mach-found - 0 942} 943 $1 - "TUXCONFIG" && mach section==l- && mach found--l { 944 print "TUXCONFIG " $2 > "appname.tux" 945} 946 $1 "MACHINES" {mach section - 1) 947 $2 -- "LMID" && mach section == 1 && $3 -- machine { 948 print "MACHINE" $1 > "appname.tux" 949 mach found = 1 951 $1 == "TUXDIR" && mach section=-i && mach found==l { 952 print "TUXDIR "$2 > "appname.tux" 953) 954 ' "machine-$machine" "appname- $ appname" 955 if [ $?!- 0] 956 then 957 exit 1 958 fi 959 appdir-'awk '$1 -- "APPDIR" {print $2)' appname.tux' 960 tuxconfig='awk '$1 -- "TUXCONFIG" {print $2}' appname.tux' 961 uname='awk '$1 == "MACHINE" {print $2)' appname.tux' 962 rootdir='awk '$1 -- "TUXDIR" (print $2)' appname.tux' 963 lang-'sed -e 's/-/ /g' -e 's/;/ /g' $ConfDir/$appname.tux I 964 awk '$1 == "LANG" (print $2}'' 965 progl="TUXDIR=$rootdir; export TUXDIR 966 APPDIR-$appdir; export APPDIR 967 LIBPATH=$(LIBPATH}:$rootdir/lib; export LIBPATH 968 TUXCONFIG-$tuxconfig; export TUXCONFIG 969 LANG=$1ang; export LANG 970 PATH- $(PATH):\$TUXDIR/bin:\$APPDIR; export PATH 971 $TUXDIR/bin/tmshutdown -y -P $6 972 echo \$? > /tmp/rem$appname.$machine.tux" 973 if [ -z "$uname"] 974 then 975 print "Host $machine not found" 976 exit 1 977 fi 978 rsh $uname -1 "$ADMIN" "$progl" 979 rsh status=-'echo $?' 41- 2773241 980 if [ "$rsh status" -eq "0"] 981 then 982 statusa-'rsh $uname -1 "$ADMIN" "cat /tmp/rem$appname. $machine.tux"' 983 rsh $MASTER -1 "$ADMIN" "rm /tmp/rem$appname.$machine.tux" 2> /dev/nul 984 rsh $uname -1 "$ADMIN" "rm /tmp/rem$appname.$machine.tux" 2> /dev/nul 985 fi 986 if [ "$status" -ne "0"] 987 then 988 exit status-'expr $exit_status + 1' 989 fi 990 if [ "$exitstatus" -ne "0" -o "$rsh status" -ne "0"] 991 then 992 exit 1 993 fi 994;; 995 loadfshm) 996 appname=$1; machine-$2; shift 2 997 setenviron 998 gettuxval > "appname. tux" 999. ./appnamne.tux 1000 prog=" 1001 TUXDIR=$tuxdir; export TUXDIR 1002 ROOTDIR=$tuxdir; export ROOTDIR 1003 LIBPATH=${LIBPATH}:$tuxdir/lib; export LIBPATH 1004 LANG=$1ang; export LANG 1005 $tuxdir/bin/loadfiles $Q 1006 echo \"\nexit \$?\."" 1007 if [ -z "$uname"] 1008 then 1009 print "Host $machine not found" 1010 exit 1 1011 fi 1012 rsh "$uname" -1 "$ADMIN" "$prog" I awk ' 1013 NR == 1 (line - $0} 1014 NR > 1 { print line; line = $0 1015 END (if(sub("^exit ","", line)) exit line; print line; exit -1)' 1016;; 1017 Unloadcf) 1018 appname=$1 1019 setenviron 1020 cmd="\$TUXDIR/bin/tmunloadcf" 1021 if [ $# -eq 2] 1022 then 1023 filename=$2 1024 remote cmd > "$filename" 1025 else 1026 remote cmd 1027 fi 1028 exit $? 1029;; 1030 *) 1031 echo "Command $1 does not exist" 1032 exit 1 1033;; 1034 esac 42 2773241 REVENDICATIONS 1. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions, basée sur un fichier binaire de configuration (TUXCONFIG) caractérisé en ce que ledit procédé comporte: - une étape de décompilation du fichier de configuration actif de la machine maître, - une étape de récupération d'informations dans le fichier de configuration décompilé de la machine maître (Mm), - une étape de vérification de la consistance de ladite application mise en oeuvre sur une machine donnée. 2. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 1, caractérisé en ce qu'il comprend une étape de gestion d'au moins un module d'écoute (3) d'une machine quelconque de l'application à partir d'une autre machine. 3. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 1, caractérisé en ce que les informations concernant ladite application distribuée sont directement prélevées dans le fichier de configuration actif de la machine maître. 4. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 1, caractérisé en ce que l'étape de vérification de consistance de ladite application consiste en une comparaison entre des informations issues du fichier de configuration de la machine maître et des informations issues de ladite application courante mise en oeuvre sur une machine donnée. 5. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 2, caractérisé en ce que la gestion des modules d'écoute consiste à lancer et à arrêter au moins un module d'écoute, à afficher des informations concernant au 43 2773241 moins un module d'écoute, a modifier le journal d'au moins un module d'écoute, à vérifier le script d'au moins un module d'écoute et à mettre à jour le script d'au moins un module d'écoute. 6. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 2, caractérisé en ce qu'il comprend une étape de lancement et d'arrêt d'un module d'écoute mis en oeuvre sur une première machine, cette étape étant mise en oeuvre par un administrateur utilisant une deuxième machine distincte de la première, appartenant au même réseau que la première machine. 7. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 2, caractérisé en ce qu'il comprend une étape d'activation simultanée de plusieurs modules d'écoute. 8. Procédé d'assistance à l'administration d'une application d'un i5 moniteur transactionnel basée sur un fichier binaire de configuration selon la revendication 2, caractérisé en ce que les étapes du procédé sont mises en ceuvre par l'intermédiaire d'une interface graphique comprenant au moins une icone, au moins un menu, et au moins une boîte de dialogue. 9. Procédé d'assistance à l'administration d'une application d'un moniteur transactionnel basée sur un fichier binaire de configuration selon la revendication 8, caractérisé en ce que les menus de l'interface graphique sont structurés sous forme d'arborescence et l'actionnement d'un menu provoque l'affichage d'une liste de valeurs de la configuration courante, sélectionnable par l'utilisateur. 10. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 4, caractérisé en ce que lorsque le fichier contenant des informations sur ladite application mise en oeuvre sur une machine donnée (tlog) est inexistant le procédé le génère automatiquement pour pouvoir l'utiliser lors du prochain lancement des modules d'écoute (3). 44 2773241 11. Procédé d'assistance à l'administration d'une application distribuée d'un gestionnaire de traitement des transactions selon la revendication 6, caractérisé en ce lesdites informations affichées concernant au moins un module d'écoute(3) comprennent au moins le nom de ladite application, le nom logique de la machine (LMID)sur laquelle ladite application est exécutée, l'identification de l'utilisateur (UID) de ladite application, I'adresse utilisée par le module d'écoute (NLSADRR), le chemin d'acces au réseau de ladite application, le chemin d'accès au fichier journal dudit module d'écoute (LLFPN).