Salut à tous,
J'ai quelques soucis pour faire du processing en parallèle. En gros, j'ai un programme écrit en bash qui va appeler plusieurs fois mon programme écrit en Perl.
Voilà mon programme bash :
Ce programme va surveiller l'ajout de lignes dans des fichiers de log et les envoyer à mon programme perl pour qu'il collecte des données sur les nouvelles lignes si elles correspondent à un certain type. Ce programme bash est censé lancé en parallèle toutes les commandes mais ça ne fonctionne pas très bien car quand je quitte le programme qui a lancé ce script et bien il tourne toujours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #!/bin/bash (tail -f /home/collectd/logs/file1 | perl /home/collectd/etc/collection.pl file1 arg2) & (tail -f /home/collectd/logs/file2 | perl /home/collectd/etc/collection.pl file2 arg2) & (tail -f /home/collectd/logs/file3 | perl /home/collectd/etc/collection.pl file3 arg2) & (tail -f /home/collectd/logs/file4 | perl /home/collectd/etc/collection.pl file4 arg2) & (tail -f /home/collectd/logs/file5 | perl /home/collectd/etc/collection.pl file5 arg2) & while [1 -eq 1]; do sleep 50; done
Voici mon programme perl :
Il va me sortir des données si la ligne qu'il analyse correspond à ce que je recherche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #!/usr/bin/perl use warnings; use strict; if ($#ARGV != 1){ print "You did not give the two necessary arguments.\nUsage: perl my_prog.pl filename VOP\n"; exit; } my $file_name=$ARGV[0]; my $sum_type=$ARGV[1]; my $node_name; my $operation_type; my $operation_counter; chomp($sum_type, $file_name); my $previous_fh = select(STDOUT); $| = 1; select($previous_fh); while (<STDIN>){ chomp; if (/\s$sum_type\sSUMMARY\s\[(\w+)\.\w+\]\s(\w+)\scnt\/(\d+)\s/) { $server_name=$1; $operation_type=$2; $operation_counter=$3; my $timestamp=time; print "PUTVAL $node_name/cvfs-$file_name/operations-$operation_type $timestamp:$operation_counter"; } }
Ce que je voudrais faire, c'est ne plus utiliser mon script bash. Je voudrais faire en parallèle la surveillance d'ajout de ligne dans mes 5 fichiers de logs et le traitement de celles-ci directement dans mon programme perl. J'ai cherché dans la doc perl j'ai vu qu'il y avait forkmanager mais je ne comprends par vraiment comment faire. Est-ce que quelqu'un aurait une idée comment je pourrai faire ?
Merci d'avance
Partager