begin process at 2012 05 27 19:51:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > DEBLOQUER POSTFIX + AMAVISD

DEBLOQUER POSTFIX + AMAVISD


 Information sur la source

 Description

Débloque le daemon amavis.

Met en queue Hold le message bloqué par amavisd.
Kill les processus amavisd fantome.
Relance amavisd.

Source

  • #!/usr/bin/php -q
  • <?php
  • /*
  • #################################
  • # Written by Alexandre Pinon ##
  • #################################
  • # Retourne la differance de temps en seconde entre le dernier mail recu
  • # et la date actuelle ainsi que son ID.
  • #
  • */
  • function Tri_Date() { // Retourne un tableau avec le timestampdu mail le + vieux et l'ID du mail le + vieux.
  • $get_data = "postqueue -p | grep -v MAILER-DAEMON | grep \"*\" | awk '{print $1\" \"$3\" \"$4\" \"$5\" \"$6}'"; // commande de prod !!
  • //$get_data = "postqueue -p | grep Oct | awk '{print $1\" \"$3\" \"$4\" \"$5\" \"$6}'"; // Commande de test !!!
  • exec($get_data, $rep_exec);
  • $result[0]=0; //timestamp de reference; sera stock&#65533; ici le plus grand des timestamps donc le mail le plus vieux.
  • $result[1]=0; //id de reference; sera stocké ici l'ID du mail le plus vieux.
  • foreach($rep_exec as $rep_line) {
  • $data = explode(" ", $rep_line); // ID du mail + date de reception
  • $day=$data[1]; // jour de la semaine
  • $day_n=$data[2]; //numero du jour
  • $month=$data[3]; //mois de l'annee
  • $full_hour=$data[4]; //heure en h:mn:s
  • $get_ts="date -d \"$day $day_n $month $full_hour\" +%s"; //timestamp d'un mail
  • $y=exec($get_ts)."\n"; // recuperation du timestamp UNIX dans PHP du mail trait&#65533; dans la boucle foreach
  • if ( $y > $x ) {
  • $result[0]=$y; //temps en seconde
  • $result[1]=str_replace("*","",$data[0]); //ID du mail le plus vieux sans * de fin si il y a !!!
  • }
  • }
  • print("Le mail le plus vieux est $result \n");
  • return $result;
  • }
  • function Queue_Hold($id="") {
  • $cmd="postsuper -h $id";
  • print ("Message ID $id HOLD in queue HOLD. \n");
  • exec($cmd);
  • }
  • function Kill_Process($process='') {
  • $get_id="ps ax | grep $process | grep -v \"grep\" | awk '{print $1}'";
  • exec($get_id, $rep_exec);
  • foreach ($rep_exec as $rep_id) {
  • $cmd="kill -9 $rep_id";
  • exec($cmd);
  • print("Process $rep_id killed. \n");
  • }
  • }
  • function Executer($cmd="") {
  • print("Execute : $cmd \n");
  • exec($cmd);
  • }
  • //
  • /*///////////////////
  • FONCTION PRINCIPALE//
  • /*///////////////////
  • //
  • print("Debut du script... \n\n");
  • Executer("/etc/init.d/amavisd stop"); //Arrete le daemon Amavisd
  • Kill_Process("amavis"); // Kill les process fantomes
  • $tab = Tri_Date(); // Recupere l'ID du mail le plus vieux
  • Queue_Hold($tab[1]); // Met le mail en question en queue hold
  • Executer("/etc/init.d/amavisd start"); // RElance le daemon Amavisd
  • Executer("postqueue -f"); // Flush la Queue
  • print("\n ... Fin du Script ! \n");
  • ?>
#!/usr/bin/php -q
<?php

/*
#################################
# Written by Alexandre Pinon   ##
#################################
# Retourne la differance de temps en seconde entre le dernier mail recu
# et la date actuelle ainsi que son ID.
#
*/


function Tri_Date() { // Retourne un tableau avec le timestampdu mail le + vieux et l'ID du mail le + vieux. 

        $get_data = "postqueue -p | grep -v MAILER-DAEMON | grep \"*\" | awk '{print $1\"   \"$3\" \"$4\" \"$5\" \"$6}'"; // commande de prod !!
        //$get_data = "postqueue -p | grep Oct | awk '{print $1\" \"$3\" \"$4\" \"$5\" \"$6}'"; // Commande de test !!!
        exec($get_data, $rep_exec);

        $result[0]=0; //timestamp de reference; sera stock&#65533; ici le plus grand des timestamps donc le mail le plus vieux.
        $result[1]=0; //id de reference; sera stocké ici l'ID du mail le plus vieux.
        foreach($rep_exec as $rep_line) {
                $data = explode(" ", $rep_line); // ID  du mail + date de reception
                $day=$data[1]; // jour de la semaine
                $day_n=$data[2]; //numero du jour
                $month=$data[3]; //mois de l'annee
                $full_hour=$data[4]; //heure en h:mn:s
                $get_ts="date -d \"$day $day_n $month $full_hour\" +%s"; //timestamp d'un mail 
                $y=exec($get_ts)."\n"; // recuperation du timestamp UNIX dans PHP du mail trait&#65533; dans la boucle foreach
                if ( $y > $x ) {
                        $result[0]=$y; //temps en seconde
                        $result[1]=str_replace("*","",$data[0]); //ID du mail le plus vieux sans * de fin si il y a !!!
                }
        }
        print("Le mail le plus vieux est $result \n");
        return $result;
}

function Queue_Hold($id="") {
        $cmd="postsuper -h $id";
        print ("Message ID $id HOLD in queue HOLD. \n");
        exec($cmd);
}



function Kill_Process($process='') {
        $get_id="ps ax | grep $process  | grep -v \"grep\" | awk '{print $1}'";
        exec($get_id, $rep_exec);
        foreach ($rep_exec as $rep_id) {
                $cmd="kill -9 $rep_id";
                exec($cmd);
                print("Process $rep_id killed. \n");
        }
}

function Executer($cmd="") {
        print("Execute : $cmd \n");
        exec($cmd);
}


//
/*///////////////////
FONCTION PRINCIPALE//
/*///////////////////
//
print("Debut du script... \n\n");
Executer("/etc/init.d/amavisd stop"); //Arrete le daemon Amavisd
Kill_Process("amavis");  // Kill les process fantomes

$tab = Tri_Date(); // Recupere l'ID du mail le plus vieux
Queue_Hold($tab[1]); // Met le mail en question en queue hold

Executer("/etc/init.d/amavisd start"); // RElance le daemon Amavisd
Executer("postqueue -f"); // Flush la Queue 
print("\n ... Fin du Script ! \n");
?>



 Sources de la même categorie

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SIMPLE EMAILING SERVICE par mtrix000
FONCTION ENVOI DE MAIL PHP QUI PERMET DE PASSER LE FILTRE AN... par alienat
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
ENCODEUR D'ADRESSES EMAILS par Boris090
CLASSE MAIL par djguigui34400

Commentaires et avis

Commentaire de X_Cli le 17/06/2010 11:23:52

En tant que sysadmin et dev, je comprends tout à fait l'intérêt du script. J'ai cependant une question : "mais pourquoi PHP ?!"
La majorité des commandes sont exéc(utées), alors autant faire un script Bash.

En dehors de cette chose qui me parait plus qu'étrange, bon script, ca fait le boulot (pas testé, mais je ne vois rien qui ne le ferait pas marcher).

Petite remarque sécurité/optimisation/tatillon-mec-chaint : l'utilisation des double quotes en PHP est plus lent (micro optimisation) et peut être moins sécurisée ou provoquer des comportements imprévus puisque les variables sont subsitutuées dans les chaines : il est donc considéré comme une bonne pratique de n'utiliser que des simples quotes quand elles sont suffisantes. De la même manière, mais cette fois-ci de manière bcp plus subjectives, j'aurai utilisé des sprintf pour formater les commandes plutôt que d'utiliser des substitutions de variables avec double quotes pour améliorer la lisibilité ; mais là-dessus, c'est potentiellement une bataille de cloché : je me permets juste de faire part de la manière que j'aurais employé.

Peut être un point d'amélioration : faire un contrôle pour vérifier que l'exécution se passe bien en root : sans cela le script doit certainement crasher, par manque de contrôles des codes retours. Idem pour un contrôle du PATH, car il y a un risque que /usr/sbin (position par défaut de certains binaires utilisés si je me souviens bien) ne soit pas dedans et que les binaires ne soient pas trouvés.

Merci pour ce script.

Commentaire de zaggash le 17/06/2010 12:22:02

Deja, merci pour ce commentaire.
Ensuite explication :

(arrêtez moi si je me trompe)

1) Pouquoi PHP ?
Je me sentais plus a l'aise d'utiliser des tableaux, ce qui n'est pas possible sous "bash" à ma connaissance.
Mais effectivement j'aurais pu "grep-er et cut-er et sed-er voir awk-er" :D

2) Amélioration..
Je n'ai pas la prétention de dire que mon script est optimisé, au contraire ce n'est que la version d"ébauche. Mais je ne suis pas DEV dans l'âme, même si j'adore ca, je fais ca avec mes seul connaissances d'admin réseau et autodidacte en DEV ;) et tant qu'il fait ce que je lui demande.

Merci pour ces petites remarques, je vais m'empresser de la reprendre et d'éditer ma source.

Heureux que ca serve à quelqu'un ;)

Commentaire de X_Cli le 17/06/2010 12:38:30

Hello,
En fait, il est possible de faire des tableaux en Bash.. mais c'est tellement la merde que personne n'en fait =) J'ai bien connu un scripteur qui les utilisait, mais personne n'a jamais compris ses scripts en général (surtout quand ils dépassaient les 1000 lignes O_o)

Pour les améliorations, pas de soucis, c'est déjà très bien de voir poper des scripts d'admin sur ce site ;) Je ne voudrais surtout pas couper l'envie :) (surtout que les micro optimisations, je suis d'accord que c'est plus pour la forme que pour l'intérêt que ca apporte !)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

PB de fonction mail() en PHP 4.3.5 sous Linux Redhat 9 [ par enguemeta ] J'ai developpé un petit système d'envoi de message avec la fonction mail() de PHP avec easyphp 1.5 sous windows cette version de easyphp integrait le Probleme mail() sous linux !! NEED HELP [ par ivanas ] Bonjour!! alors voila jai un probleme sous Linux (mdk10) jarrive pas a faire marcher la fonction mail() lerreur : undefined function mail()...Jai inst Fonction Mail - Question simple... [ par dadybond ] En fait je cherche envoyer simplement un email de type texte (non html) mais je voudrais savoir comment fait-on les sauts de ligne avec ce format.Mer mail et piece jointe apres validation formulaire [ par Malabarix ] Salut,Voila j'ai un formulaire sur mon site dans le quel je fais entrez différente informations dont un &lt;input type=file name=image&gt;.apres selec mail zipé [ par Malabarix ] voila j'ai un formulaire, dedans le client met une photo!Je dois ensuite l'envoyer par mail a l'administrateur mais la piece jointe doit etre compréss formulaie email [ par LiTtLeBuBu ] Bonjour, VOila jai fais un formail en php sur la base d'un code source qui est "formailplus" trouver sur internet et j'arrive a envoyer des emails Difference Linux - Win 2000 server [ par Fantomas33 ] Bonjour,J'ai un petit soucis. Je développe mon application php sur un poste win2000 client et je la teste et l'héberge sur Linux.Hors, on vient de me validation mail [ par meth06 ] Bonjour, je cherche a faire une validation d'un mail mais pas la simple validation avec la verif du @ et du . Je voudrais verifier si l'adresse mail e fonction mail ?! [ par Spiritraid ] J'ai un chti pb, plutot... embettant, voire mm très embettant :/je ressors ma fonction mail pour l'utiliser, mais j'ai du oublier comment elle marche linux upload taille des fichiers envoyés [ par TRASH52 ] TRASH52Le serveur tourne sous la red hat 9.0 Bon apres de multiples tests:


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales