Ci-dessous un script de monitoring FTP permettant de pouvoir superviser n’importe quel serveur FTP . Celui-ci ce veux autonome en cas d’un échec détecté, permettant de pouvoir exécuter des commandes PHP CLI avec exec() par exemple .
Celui-ci nécessite :
– Création d’un dossier :
mkdir -p /home/automate/ftpmonit/alerte
chmod o+x /home/automate/ftpmonit/alerte
– Création d’un fichier connect.txt dans /home/automate/ftpmonit du format suivant :
<SERVEUR>|<UTILISATEUR>|<PASSWORD>
– Copie du code suivant dans le fichier : /home/automate/ftpmonit/monit.php
– Création d’un cron pour qui soit répétitif ( http://fr.wikipedia.org/wiki/Crontab )
<?php function restore($user,$server){ $file = "/home/automate/ftpmonit/alerte/$user.$server.txt"; $num = file_get_contents($file);
$numc = trim($num)+1;
file_put_contents($file,$numc); if ($numc > 2 ){ if ($numc < 4 ){ echo "Trop de tentative : echec des relances\n"; $daten = date("d/m/Y H:i:s"); $message = "Panne du serveur : $user@$server a $daten \n ECHEC DES 3 TENTATIVES : \n\n Status : en attente d'une OPERATION MANUELLE"; mail("< VOTRE EMAIL >","[URGENT ALERTE FTP : $user]",$message,"From:< VOTRE EMAIL >"); }else{ echo "Trop de tentative - Message deja effectif\n"; } }else{ < VOS EXÉCUTIONS > } }
function alerte($user,$server){ $file = "/home/automate/ftpmonit/alerte/$user.$server.txt"; if (! file_exists($file)){ file_put_contents($file,"ALERTE"); $daten = date("d/m/Y H:i:s"); $message = "Panne du serveur : $user@$server a $daten \n\n Status : en attente d'un RECOVERY"; mail("< VOTRE EMAIL >","[ALERTE FTP : $user]",$message,"From:< VOTRE EMAIL >"); restore($user,$server); }else{ echo "\nFile Lock d<E9>ja present pour $user \n"; restore($user,$server); } }
function recovery($user,$server){ $file = "/home/automate/ftpmonit/alerte/$user.$server.txt"; if (file_exists($file)){ unlink($file); $daten = date("d/m/Y H:i:s"); $message = "Restauration du serveur : $user@$server a $daten"; mail("< VOTRE EMAIL >","[RECOVERY FTP : $user]",$message,"From:< VOTRE EMAIL >"); } }
// Mise en place d'une connexion basique $lines = file('/home/automate/ftpmonit/connect.txt'); /*On parcourt le tableau $lines et on affiche le contenu de chaque ligne pr<E9>c<E9>d<E9>e de son num<E9>ro*/ foreach ($lines as $lineContent) { list($ftpd,$user,$passwd)=explode("|",$lineContent); $ftp_server = $ftpd; $ftp_user = $user; $ftp_pass = $passwd; echo "CONNEXION : $ftpd - AVEC $user \n"; if (@ftp_connect(trim($ftpd))){ $conn_id = @ftp_connect(trim($ftpd)) or die("Couldn't connect to $ftp_server"); }else{
echo "\nEchec de connexion $ftpd\n"; $no = 1; alerte($ftpd,$user); } if ($no != 1){ // Tentative d'identification if (@ftp_login($conn_id, trim($ftp_user), trim($passwd))) { echo "OK"; $file = "/home/automate/ftpmonit/alerte/$ftp_user.$ftp_server.txt"; if (file_exists($file)){ echo " Recovery : $ftp_user@$ftp_server\n"; recovery($user,$ftpd); }else{ echo " Connect $ftp_user@$ftp_server\n"; } } else {
echo "NOK $ftp_user\n"; alerte($user,$ftpd); } } // Fermeture de la connexion @ftp_close($conn_id); unset($ftpd); unset($user); unset($passwd); unset($no); sleep("10"); echo "\n\n=========================================\n\n"; } ?>