Aller au contenu principal

Ordonnanceurs < Les incontournables < Autosys < Exploitation

Script d’attente de fichier

Ce script permet de mettre en place une attente de fichier. Il est particulièrement utile pour Autosys car il remplace le type de job ’f’ d’Autosys qui ne permettait pas de traiter les fichiers de plus de 64 caractères, ni de traiter plusieurs fichiers à la fois.

E. Angenault

8 mars 2009

 POPULARITE : 956 visites

Ce script reprend les paramètres du file watcher natif sans subir les limitations de ce dernier :

- taille du nom (répertoire+fichier) inférieur à 64 caractères cette limitation est seulement pour l’agent windows avant la version R11.
- impossibilité de préciser la taille minimale avec les jokers en effet le produit reste bloqué sur le premier fichier trouvé, si celui ci reste à une taille inférieure à la taille indiquée, les fichiers arrivant après, même de taille supérieur, ne seront pas prise en compte.
- non prise en compte des répertoires distants (unc, samba...) le script perl les prend en compte avec les versions de perl supérieures à celle livrée avec Autosys

Arguments

Arg Description Valeur par défaut Type
path répertoire dans lequel se trouve les fichiers répertoire courant
file fichier(s) a attendre n’importe quel fichier expression régulière
freq fréquence de test 30 secondes
steady Temps prendant lequel le fichier ne grossit plus 30 secondes
size taille minimale du fichier 0 octets
count nombre de fichiers à attendre 1
maxtime temps maximum à attendre avant de sortir en erreur 300 secondes

Exemples

Attente de 2 fichiers
- nommmé "Test" suivi de 2 chiffres
- dont la taille est supérieure à 5 Ko
- situés dans le répertoire /tmp
- devant obligatoirement arriver avant 15 minutes

fw.pl path=/tmp file=Test\d\d size=5120 count=2 maxtime=900

Attente d’un gros fichier

Dans le cas d’un gros fichier, on définit une période de temps pendant laquelle le fichier ne doit pas grossir, cette période est appelé steady state. La vérification de la bonne réception d’un fichier se fait donc en 2 temps :
- test de la présence du fichier toutes les n secondes (argument freq). puis
- test de la stabilisation du fichier pendant n autres secondes (argument steady).


fw.pl (PERL)

Script perl d’attente de fichier à utiliser en tant que commande au lieu du file watcher natif d’Autos.

#!/usr/bin/perl
# Script d'attente de fichier
# E.Angenault
# http://ordonnancement.org

$path=".";
$file=".";
$freq=30;
$steady=$freq;
$size=0;
$count=1;
$maxtime=300;

foreach (@ARGV) {
	($var,$val)=split(/=/);
	${$var} = $val;
}

print "Path:\t$path\n";
print "File:\t$file\n";
print "Freq:\t$freq\n";
print "Size:\t$size\n";
print "Count:\t$count\n";
print "Steady:\t$steady\n";
print "MaxTime:\t$maxtime\n";

$ok=1;
$start=time();
do {
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
		localtime();  
	printf("%02d:%02d:%02d\n",$hour,$min,$sec);
	opendir DIR,$path || die "Path error: $path" ;
	@Dir = readdir(DIR);
	close(DIR);
	foreach $f (@Dir) {
		if (($f ne ".") && ($f ne "..") && ($f =~ /$file/i)) {
			($dev,
			$ino,
			$mode,
			$nlink,
			$uid,
			$gid,
			$rdev,
			$s,
			$atime,
			$mtime,
			$ctime,
			$blksize,
			$blocks) = stat("$path/$f");
			if ($s>$fsize{$f}) {
				$time{$f}=time();
			}
			$fsize{$f}=$s;
			$last = time()-$time{$f};
			print("\t$f\t$s\t$last");
			if (	($last>$steady) 
				&& ($s>$size)) {
				$arrived{$f}=time();
				print "\tOK";
			}
			print "\n";
		}	
	}
	$nb=0;
	foreach $k (keys %arrived) {
		if ($arrived{$k}) {
			$nb++;
		}
		if ($nb>=$count) {
			$ok=0;
			$stop=1;
		}
	}
	if (time()-$start>$maxtime) {
		$stop=1;
	}
	sleep($freq)
		unless $stop;
} while !($stop);

print "Exit:\t$ok\n";
exit($ok);

Télécharger PERL (1370 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.