Bonjour à tous,

Je viens vous voir car sur un de mes scripts perl, j'ai un soucis incompréhensible avec la commande system, j'explique.

Je suis en train de créer un script de backup de plusieurs répertoire, pour ce faire, je créer donc un répertoire temporaire dans lequel je copie mes différents répertoires à sauvegarder puis je fait une sauvegarde grâce à tar avant de supprimer le dossier temporaire.

La création de mes dossiers se fait via une fonction qui lance cette ligne de commande :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for($i=0;$i<=$#chemin;$i++){
        system('mkdir '.$chemin[$i]);
}
avec mes chemin défini comme tel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
my $path="/tmp/bck-shinken.$id_backup/";
my @chemin=($path,$path.'etc/',$path.'lib/',$path.'log/',$path.'www/');
$id_backup est une variable construite à partir de la date sous la forme (YYYYMMDDHHmm).

Jusque là, tout va bien, le problème viens ensuite lorsque je veux copier mes différents répertoire dans ceux que j'ai créer via les commandes (Je ferais une fonction de copies lorsque j'aurais réussi à la faire fonctionner) :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
system('cp -R /etc/shinken/* '.$path.'etc/')||die "Impossible de copier le répertoire /etc/shinken/ : $!";
system('cp -R /var/lib/shinken/* '.$path.'lib/')||die "Impossible de copier le répertoire /var/lib/shinken/ : $!";
system('cp -R /var/log/shinken/* '.$path.'log/')||die "Impossible de copier le répertoire /var/log/shinken/ : $!";
system('cp -R /var/www/* '.$path.'www/')||die "Impossible de copier le répertoire /var/www/ : $!";
Et c'est la que j'ai un soucis, je me retrouve avec ce message d'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Impossible de copier le répertoire /etc/shinken/ :  at backup.pl line 49.
Sauf que les donnée présente dans /etc/shinken sont bien présente dans /tmp/bck-shinken.id_backup/etc, du coup j'ai un message d'erreur qui me stop mon script alors que la commande à fonctionner, je ne comprend plus rien :/

Si quelqun a une idée de ce à quoi cela pourrait être dû, je suis preneur.

PS: Voici le code complet de mon script. (Je n'ai pas trouver la balise pour cacher tout le code à la fin histoire de réduire un peu le message)


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/perl
 
use strict;
use warnings;
 
sub recup_time{
my ($annee,$mois,$jour,$heure,$minute);
my @t;
my $temps;
 
@t=localtime(time);
 
$annee=1900+$t[5];
$mois=1+$t[4];
$jour=$t[3];
$heure=$t[2];
$minute=$t[1];
 
if($mois<10){$mois='0'.$mois;}
if($jour<10){$jour='0'.$jour;}
if($heure<10){$heure='0'.$heure;}
if($minute<10){$minute='0'.$minute;}
 
$temps=$annee.$mois.$jour.$heure.$minute."\n";
 
return $temps;
}
 
sub create_dir {
 
        my (@chemin)=@_;
        my $i;
        for($i=0;$i<=$#chemin;$i++){
                system('mkdir '.$chemin[$i]);
        }
}
 
sub save {
        my ($id_backup)=@_;
        chomp($id_backup);
 
        my $path="/tmp/bck-shinken.$id_backup/";
        my @chemin=($path,$path.'etc/',$path.'lib/',$path.'log/',$path.'www/');
 
        print $id_backup."\n";
        create_dir(@chemin);
        system('cp -R /etc/shinken/* '.$path.'etc/')||die "Impossible de copier le répertoire /etc/shinken/ : $!";
        system('cp -R /var/lib/shinken/* '.$path.'lib/')||die "Impossible de copier le répertoire /var/lib/shinken/ : $!";
        system('cp -R /var/log/shinken/* '.$path.'log/')||die "Impossible de copier le répertoire /var/log/shinken/ : $!";
        system('cp -R /var/www/* '.$path.'www/')||die "Impossible de copier le répertoire /var/www/ : $!";
        system("cd $path");
        system('tar -czf --exclude=doc /opt/backup/bck-shinken.'.$id_backup.'.tar.gz *');
#       system('rm -R /tmp/bck-shinken.'.$id_backup);
}
 
my $time=recup_time();
 
save($time);