Aller au contenu principal

Ordonnanceurs < Les incontournables < Autosys < Exploitation

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.

E. Angenault

30 décembre 2004

 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

Langages
Perl
Voir aussi...
Java, Python, SQL, UML

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.