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";
}
?>