Debloquer postfix + amavisd

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 956 fois - Téléchargée 16 fois

Contenu du snippet

Débloque le daemon amavis.

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

Source / Exemple :


#!/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"); ?>

A voir également

Ajouter un commentaire

Commentaires

X_Cli
Messages postés
44
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
2 mars 2013

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 !)
zaggash
Messages postés
6
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
26 juin 2010

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 ;)
X_Cli
Messages postés
44
Date d'inscription
dimanche 12 mars 2006
Statut
Membre
Dernière intervention
2 mars 2013

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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.