Traitement automatique du chase

Le chase est un exécutable Autosys qui vérifie que les jobs en statut Running dans la base de donnée sont effectivement en cours d’exécution sur la base de données. Ce script propose un moyen de traiter automatiquement la sortie pour changer le statut et permettre ainsi de reprendre la main.
POPULARITE :
1716 visites
Le chase liste les traitements en statut STARTING et RUNNING, il vérifie ensuite que les traitements STARTING ne sont pas dans cet état depuis plus de 2 minutes et que les seconds sont effectivement présents sur la machine.
Pour les jobs RUNNING, le serveur fait une demande de vérification auprès de l’agent en précisant le PID de l’agent et du job, ces 2 processus doivent être présents sur la machine pour valider le bon fonctionnement.
Dans le cas contraire, on recupère différents messages, le scripts Perl déduit un code retour par rapport à ces messages et execute une action en fonction de ce code :
| Code |
Format de message (expression régulière) |
Traduction |
| 1 |
Could not connect to machine : (.* ?) The machine or the network must be down. |
l’agent ne répond plus |
| 2 |
^\*\*\* ERROR : |
Agent disparu (certainement killé) |
| 3 |
^ Job has been in the STARTING state more than 120 Seconds. Manual intervention may be required. |
Le traitement a été soumis mais l’agent ne répond pas |
| 4 |
^ Job in RUNNING state, but BOTH AutoSys Remote Agent and user process are NOT running on machine |
Il n’y a plus ni agent, ni traitement (généralement un reboot de machine) |
| 5 |
^ Chase Error : |
Erreur renvoyée par le chase |
Un exemple de chase est indiqué en fin de script.
Arguments
| Arg | Description | Defaut |
| 0 |
Action a réaliser |
--- |
| 1 |
Codes retours à traiter |
1,3,5 |
Exemple
Information
Commande a effectuer pour obtenir un tableau que l’on pourra traiter par script.
chase | chase.pl
Changement de statut
Si on souhaite effectuer un kill sur les traitements en erreur, il faut indiquer TERMINATED en argument
chase | chase.pl TERMINATED
L’intérêt de la commande est :
de renvoyer un message d’alerte au pilotage
de sortir du statut RUNNING qui bloque tout nouveau lancement
Traitement d’un code particulier
Changement de statut seulement dans le cas de machine déconnectée
chase | chase.pl TERMINATED 1
Chase (PERL)
Script Perl permettant de traiter la sortie du chase afin de changer le statut d’un job et retrouver une certaine cohérence avec la base de données.
#!/usr/bin/perl
## + chase.pl
## Actions sur le resultat d'un chase.
## Le chase liste les jobs en etat starting et running puis verifie sur chaque machine de le pid de l'auto_remote et de la commande sont bien presents.
## ! Auteur | E. Angenault
## ! Creation | 30/12/2004
## - Parametres
## ! 0 | Optionnel: TERMINATED pour killer les traitements en erreur
## ! 1 | Optionnel: Erreurs prises en compte (par défaut: 1,3)
## - Erreurs
## ! 0 | Tout va bien
## ! 1 | Impossible de se connecter sur la machine
## ! 2 | ERROR
## ! 3 | Job en etat starting depuis plus de 2 minutes
$Action ="---"
unless $Action = $ARGV[0];
$Errs = "1,3,5"
unless $Errs = $ARGV[1];
## - Appel
## ~ chase | chase.pl
## * Si on souhaite effectuer un kill sur les traitements en erreur, il faut indiquer TERMINATED en argument
## ~ chase | chase.pl TERMINATED
## * Si on ne veut traiter que les starting
## ~ chase | chase.pl TERMINATED 3
## - Cas a traiter
$exit=0;
while (<STDIN>) {
if (/^ \[(\w*) connected\]/) {
$connected{$1}=1;
}
## = Examen
## On recupere le nom du job et le nom de la machine.
elsif (/^Examining Job: (.*?) \s*/)
{
$job=$1;
if (/On Machine: (\w*)\n/) {
$machine=$1;
}
}
## = Tout va bien
elsif (/^ OK!/
|| /^ Everything is fine/) {
$error=$_;
$err=0;
}
## = L'agent ne répond plus
elsif (/ Could not connect to machine: (.*?) The machine or the network must be down./) {
$error=$_;
$err=1;
}
## = Job de plus de 2 minutes
elsif (s/^\*\*\* ERROR: //)
{
$error=$_;
$err=2;
}
## = Job en starting de plus de 2 minutes
elsif (/^ Job has been in the STARTING state more than 120 Seconds. Manual intervention may be required./) {
$error=$_;
$err=3;
}
## = Job en running
elsif (/^ Job in RUNNING state, but BOTH AutoSys Remote Agent and user process are NOT running on machine/) {
$error=$_;
$err=4;
}
## = Gestion de l'erreur
elsif (s/^ Chase Error: //)
{
$error=$_;
$err=5;
}
## = Informations
## Prise en charge des informations pour eviter l'erreur 99.
elsif ( /^ Manual intervention is required/
|| /^ Needs Manual Investigation/
|| /^ Chase Information : /
|| /^ Job status Information : /
# Pb connexion
|| /^ Can not determine the status of/) {
}
## = Fin de bloc
## Le bloc est termine par un souligne continu
elsif (/\_{78}/) {
$exit++ if ($err>0);
chop($error);
## On execute l'action
$exec = GetAction($job,$err);
if ($exec ne "") {
$res = `$exec`;
}
if ($job ne "") {
print "$job\t$machine\t$connected{$machine}\t$err\t$error\t$exec\t$res\n";
}
# RAZ
$job="";
$error="";
$err=0;
$exec="";
$machine="N/A";
}
# Lignes vides non gerees
elsif (/^\n/) {
}
## = Erreurs non gere
else {
print STDERR $_;
$error=$_;
$err=99;
}
}
exit($exit);
sub GetAction
{
my($job,$err)=@_;
my($exec);
foreach $e (split(/,/,$Errs)) {
if ($err == $e) {
if ($Action eq "TERMINATED") {
$exec="sendevent -E CHANGE_STATUS -J $job -s TERMINATED -C 'killed by ATSC-CHCK01-CUX-Chase_Alarm'";
}
}
}
return $exec;
}
## - Exemple de Chase
## ______________________________________________________________________________
##
## Running the Chase Process.
##
## ______________________________________________________________________________
##
## ______________________________________________________________________________
## Checking on Jobs in the STARTING state...
## ______________________________________________________________________________
##
##
## Examining Job: JOB-TEST
##
## Job has been in the STARTING state more than 120 Seconds. Manual intervention may be required.
##
## ______________________________________________________________________________
##
## Checking on Jobs in the RUNNING state...
## ______________________________________________________________________________
##
## [machine12 connected]
## ______________________________________________________________________________
##
## Examining Job: JOB-EN-COURS On Machine: machine12
## OK! Both the auto_remote daemon and the job are still running.
## ______________________________________________________________________________
Télécharger PERL (4370 octets)
Doc |
- Scripts
Ces scripts sont destinés aux utilisateurs d’ordonnanceurs, qu’ils soient simple utilisateurs ou administrateurs.
- Voir aussi...
- A la une, autotrad, Cas pratique, Communiqué de Presse, Documentation, Eyrolles, FAQ, Fiche technique, Forum utilisateur, graphique, news, Procédure d’installation
|
|
Le document issu de http://Ordonnancement.org est mis à disposition sous les termes de la licence Creative Commons,
vous pouvez l'utilisez dans vos documents à condition de citer l'auteur
E. Angenault, vous êtes aussi libre de le modifier. Par contre, vous devez le redistribuer dans les mêmes conditions et la commercialisation ne peut se faire qu'avec l'accord de l'auteur. |
/BOUCLE_Source>