mercredi 31 octobre 2012

Script de backup FTP en DOS



Si vous avez besoin de faire des backup en téléchargeant des données présentent sur un serveur FTP, il existe des solutions softwares toutes faites.

Ces solutions sont très efficaces et si vous désirez prendre ce chemin, je vous conseille d'utiliser Cobian Backup, qui est gratuit et téléchargeable sur: http://www.cobiansoft.com/index.htm

Cependant, j'ai remarqué que tous ces softs, y compris Cobian, ont un problème de stabilité dans le temps. Ma station de backup est un ancien Dell Optiplex de 10 ans d'âge, sous Windows XP, qui a en charge les backups d'une petite dizaine de serveurs. L’uptime actuel sur cette machine est d’un an et 3 mois (elle s’était éteinte à cause d’une coupure de courant). Un beau jour, Cobian Backup a décidé de ne plus fonctionner. Aucune mise à jour n'a pu résoudre le problème. L’ordinateur étant très stable malgré son âge, je ne voyais aucune raison d’en changer.

Ceci m'a poussé à trouver une solution sous DOS, car DOS est synonyme de stabilité, pérennité, simplicité et légèreté. De plus, on peut créer des logs très simplement, ce qui très intéressant.

Ce script de backup DOS va donc vous permettre de recycler un ancien PC en station de backup. Cette station va se connecter à un serveur FTP, vérifier s’il y a de nouveaux fichiers à télécharger (cela ne sert à rien de télécharger si on a déjà tout sauvé), et télécharger ce qui est nouveau. Pour ce qui est du lancement automatique de ce script, vous passerez simplement par le Task Manager (Gestionnaire des Tâches), présent dans Windows.


Le script de backup FTP en DOS 

@Echo Off

REM -- Nous allons définir un filtre. Dans ce cas, nous n'allons prendre que les archives .jpa qui sont les archives de backup de Joomla (Joomla est un CMS) Vous devez donc modifier ce filtre en fonction de vos besoins.
Set FindStrArgs=/E /C:".jpa"

REM -- Le script crée une liste de ce qui est présent sur le FTP afin de comparer avec ce qu'il a déjà télécharger lors d'une précédente exécution
Set "FtpCommand=ls"
Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"
Rem Notepad "%temp%\%~n0.ftp"

REM -- Lancement du script FTP
Set "FileList="
For /F "Delims=" %%A In ('"Ftp -v -i -s:"%temp%\%~n0.ftp"|Findstr %FindStrArgs%"') Do (
    Call Set "FileList=%%FileList%% "%%A""
)

REM -- Le FTP télécharge les nouveaux fichiers
Set "FtpCommand=mget"
For %%A In (%FileList%) Do If Not Exist "%%~A" Call Set "FtpCommand=%%FtpCommand%% "%%~A""
Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"
Rem Notepad "%temp%\%~n0.ftp"

For %%A In (%FtpCommand%) Do Echo.%%A

ftp -i -s:"%temp%\%~n0.ftp"
Del "%temp%\%~n0.ftp"
GOTO:EOF

SETLOCAL Disabledelayedexpansion
set "bmk=%~1"
set "emk=%~2"
set "src=%~3"
set "bExtr="
set "bSubs="
if "%src%"=="" set src=%~f0&        rem if no source file then assume THIS file
for /f "tokens=1,* delims=]" %%A in ('find /n /v "" "%src%"') do (
    if /i "%%B"=="%emk%" set "bExtr="&set "bSubs="
    if defined bExtr if defined bSubs (call echo.%%B) ELSE (echo.%%B)
    if /i "%%B"=="%bmk%"   set "bExtr=Y"
    if /i "%%B"=="%bmk%:S" set "bExtr=Y"&set "bSubs=Y"
)
EXIT /b

REM -- C'est ici que vous allez configurer la connexion FTP
[Ftp Script 1]:S
!Title Connecting...
REM -- Indiquez l'URL
open url_du_ftp.com
REM -- Indiquez le LOGIN
mon_login_ftp
REM -- Indiquez le Mot de Passe

mot_de_passe_ftp_007

!Title Preparing...
REM -- Indiquez au script l'endroit où il doit aller sur le server FTP
cd /httpdocs/www/mon_site_web/dossier_des_backups
REM -- Indiquez au script où il doit placer le backup
lcd c:\mes_backup_de_site_web\
binary
hash

!Title Processing... %FtpCommand%
%FtpCommand%

!Title Disconnecting...
disconnect
bye

Le script pour uploader sur un FTP en DOS

Peut-être que dans votre processus de backup, vous avez besoins de faire aussi l'inverse, c'est à dire uploader vos backup sur un serveur, via un script DOS sous Windows.

La même logique peut donc être appliquée via ce script:

@Echo Off
Setlocal Enabledelayedexpansion

REM -- Nous allons définir un filtre. Dans ce cas, nous n'allons pas en utiliser. Vous devez donc modifier ce filtre en fonction de vos besoins.
Set FindStrArgs=/E /C:".*"

REM -- Le script crée une liste de ce qui est présent sur le FTP afin de comparer avec ce qu'il a déjà télécharger lors d'une précédente exécution
Set "FtpCommand=ls"
Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"
Rem Notepad "%temp%\%~n0.ftp"

Set "FileList="
For /F "Delims=" %%A In ('"Ftp -v -i -s:"%temp%\%~n0.ftp"|Findstr %FindStrArgs%"') Do (
    Call Set "FileList=%%FileList%% "%%A""
)

REM -- Le script upload ce qui n'est pas présent sur le serveur FTP
Set "FtpCommand=mput"
For %%A In (%FileList%) Do set "Exist["%%~A"]=Y"
For /F "Delims=" %%A In ('"dir /b "%localdir%"|Findstr %FindStrArgs%"') Do (
    If Not defined Exist["%%~A"] Call Set "FtpCommand=%%FtpCommand%% "%%~A""
)
Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"
rem  Notepad "%temp%\%~n0.ftp"

For %%A In (%FtpCommand%) Do Echo.%%A

REM -- Execute Ftp Script, download files
ftp -i -s:"%temp%\%~n0.ftp"
Del "%temp%\%~n0.ftp"
GOTO:EOF

SETLOCAL Disabledelayedexpansion
set "bmk=%~1"
set "emk=%~2"
set "src=%~3"
set "bExtr="
set "bSubs="
if "%src%"=="" set src=%~f0&        rem if no source file then assume THIS file
for /f "tokens=1,* delims=]" %%A in ('find /n /v "" "%src%"') do (
    if /i "%%B"=="%emk%" set "bExtr="&set "bSubs="
    if defined bExtr if defined bSubs (call echo.%%B) ELSE (echo.%%B)
    if /i "%%B"=="%bmk%"   set "bExtr=Y"
    if /i "%%B"=="%bmk%:S" set "bExtr=Y"&set "bSubs=Y"
)
EXIT /b

REM -- C'est ici que vous allez configurer la connexion FTP
[Ftp Script 1]:S
!Title Connecting...
REM -- Indiquer l'URL du serveur (dans ce cas c'est un NAS avec une IP locale)
open 192.168.1.52
REM -- Indiquer le LOGIN
mon_login_ftp
REM -- Indiquez le Mot de Passe
mon_mot_de_passe_007

!Title Preparing...
REM -- Indiquez au script l'endroit où il doit aller sur le server FTP
cd BCK/backup_du_premier_site_web
REM -- Indiquez au script où il doit placer le backup
lcd c:\bck_simplecrm
binary
hash

!Title Processing... %FtpCommand%
%FtpCommand%

!Title Disconnecting...
disconnect
bye

Aucun commentaire:

Publier un commentaire