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 :
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
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.

Voici mon programme perl :

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";
    }
}
Il va me sortir des données si la ligne qu'il analyse correspond à ce que je recherche.

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