Nous avons essayé plusieurs configuration pour transférer une file d’attente d’un serveur Xeams vers un autre.
1ere méthode
Sur le premier serveur:
On vérifie les courriels qui ne sortent pas du premier serveur en regardant dans le fichier de log /opt/Xeams/logs/SmtpQueue.log
Nous capturons les fichiers devant être renvoyés plus tard en filtrant sur le texte “incremented”
Failure count for FILE_ID.eml incremented to N. Reason: ….
Une fois récupérer le FILE_ID, on le transfert vers le 2e serveur.
tail -f /opt/Xeams/logs/SmtpQueue.log | awk '{ if ($8=="incremented") { print $7; system("scp /opt/Xeams/OutboundMailQueue/"$7" user@serveur2:/opt/Xeams/OutboundMailQueue/"); system("rm - f /opt/Xeams/OutboundMailQueue/"$7); }}'
Une variante est de ne pas effacer le courriel du 1er serveur:
Dans ce cas, on fait tourner 2 scripts sur le 2e serveur pour le traitement du courriel.
Sur le premier serveur:
tail -f /opt/Xeams/logs/SmtpQueue.log | awk '{ if ($8=="incremented") { print $7; system("scp /opt/Xeams/OutboundMailQueue/"$7" user@serveur2:/opt/Xeams/OutboundMailQueue/"); }}'
Sur le deuxième serveur:
Si le courriel est envoyé avec succès du 2e serveur, alors on l’efface du 1er serveur pour ne pas l’envoyer potentiellement 2 fois:
tail -f /opt/Xeams/logs/SmtpQueue.log | awk '{ if ($9=="successfully") { print $7; system("/root/rm_remote.sh user@serveur1 /opt/Xeams/OutboundMailQueue/"$7) } }'
Si le courriel ne s’envoie toujours pas, on l’efface localement pour pas le reessayer indefiniment.
tail -f /opt/Xeams/logs/SmtpQueue.log | awk '{ if ($8=="incremented") { print $7; system("rm -f /opt/Xeams/OutboundMailQueue/"$7) } }'
L’inconvénient de cette méthode avec ce script c’est que lors d’un retry sur le premier serveur, le courriel va a nouveau être envoyé sur le 2e serveur et ainsi de suite.
2e méthode (plus simple)
En cas de failure sur le 1er server, on déplace sur le 2e serveur et on le laisse s’envoyer ou non du 2e.
tail -f /opt/Xeams/logs/SmtpQueue.log | awk '{ if ($8=="incremented") { print strftime(); system("scp /opt/Xeams/OutboundMailQueue/"$7" user@serveur2:/opt/Xeams/OutboundMailQueue/"); system("mv /opt/Xeams/OutboundMailQueue/"$7" /root/mctest/"); }}'
Contenu du fichier rm_remote.sh:
#!/bin/bash ssh $1 "rm -f $2"