#!perl use strict ; use Win32::Process::List; # configuration: # Repertoire de base my $rootDir= 'c:\\rsync' ; # Repertoire a sauvegarder. # /!\ Attention aux / # Ne pas inclure la lettre de lecteur. my $src= "/Documents and Settings/frederic.helin" ; # nom ou adresse du serveur de sauvegarde my $server= "workine" ; # compte utilisé pour les sauvegardes my $user= "backup" ; # mot de passe associé au compte $user my $pass= 'backup' ; # Répertoire de stockage des sauvegardes sur le server my $dst= "::Upload/externe/" ; # chemin d'accès vers l'exécutable rsync my $rsync= "$rootDir\\rsync.exe" ; # fichier contenant la liste des fichiers à exclure de la sauvegarde my $exclude= "$rootDir\\exclude" ; # Options rsync my $rsyncOptions= "-a --delete --stats --exclude-from=$exclude" ; # fichier du mot de passe associé au compte "$user" my $passFile= "$rootDir\\pass" ; # fichier de log ( contient la date de la sauvegarde ). doit être dans un emplacement sauvegardé par le serveur car utilisé par celui-ci pour vérifier la periodicité des sauvegardes. our $logFile= "$src\\rsync.log" ; our $fd ; sub openLog($){ my $logFile=shift ; open our $fd, ">>$logFile" or die "open: $!" ; } sub closeLog(){ close our $fd ; } sub writeLog($){ my $msg = shift ; my $date=localtime ; print $fd "$date: $msg" ; } sub isProcessAlive($){ my $process=shift ; my $P = Win32::Process::List->new(); my $result = $P->GetProcessPid( $process ) ; if( $result > 0 ){ return 1 ; } else{ return 0 } } sub writePassFile($$){ my ($file, $pass) = @_ ; open my $fd, ">$file" or die "open: $!" ; print $fd $pass."\n" or die "print: $!" ; close $fd ; } sub deletePassFile($){ my $file = shift ; unlink($file) or die "Can't unlink $file: $!"; } openLog( $logFile ) ; writeLog "backup starting\n" ; my $process="outlook" ; if( isProcessAlive( $process ) ){ writeLog( "Outlook is running\n" ) ; writeLog( "Backup aborted\n" ) ; exit 1 ; } writePassFile( $passFile, $pass ) ; my $cmdArgs="$rsyncOptions"." --password-file="."$passFile \"$src\" $user".'@'."$server$dst" ; my $result=` $rsync $cmdArgs 2>&1` ; deletePassFile( $passFile ) ; writeLog "$result" ; writeLog "backup done\n\n" ; close( $logFile ) ;