Mam tutaj dość irytujący problem. Testowałem aplikację i stworzyłem kilka testowych wiadomości e-mail na fałszywe adresy e-mail (nie wspominając o tym, że mój serwer tak naprawdę nie jest skonfigurowany do wysyłania wiadomości e-mail). Oczywiście sendmail
nie jest w stanie wysłać tych wiadomości i utknęły w sendmail
kolejce. Chcę ręcznie usunąć wiadomości, które gromadzą się w kolejce, zamiast czekać 5 dni, które sendmail
zwykle kończą się ponowną próbą.
Korzystam z systemu Ubuntu 10.04 i /var/spool/mqueue/
jest to katalog, w którym każde przeczytane instrukcje mówią, że wiadomości e-mail w kolejce są przechowywane. Kiedy usuwam pliki w tym katalogu, sendmail
przestaję przetwarzać wiadomości e-mail, dopóki nie zostanie uruchomiony skrypt, który wydaje się być cronem, i ponownie zapełni ten katalog wiadomościami, których nie chcę wysyłać. Oto kilka wierszy z mojego syslog
:
Jun 2 17:35:19 sajo-laptop sm-mta[9367]: o530SlbK009365: to=, ctladdr= (33/33), delay=00:06:27, xdelay=00:06:22, mailer=esmtp, pri=120418, relay=e.mx.mail.yahoo.com. [67.195.168.230], dsn=4.0.0, stat=Deferred: Connection timed out with e.mx.mail.yahoo.com.
Jun 2 17:35:48 sajo-laptop sm-mta[9149]: o4VHn3cw003597: to=, ctladdr= (33/33), delay=2+06:46:45, xdelay=00:34:12, mailer=esmtp, pri=3540649, relay=mx2.hotmail.com. [65.54.188.94], dsn=4.0.0, stat=Deferred: Connection timed out with mx2.hotmail.com.
Jun 2 17:39:02 sajo-laptop CRON[9510]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm)
Jun 2 17:39:43 sajo-laptop sm-mta[9372]: o52LHK4s007585: to=, ctladdr= (33/33), delay=03:22:18, xdelay=00:06:28, mailer=esmtp, pri=1470404, relay=c.mx.mail.yahoo.com. [206.190.54.127], dsn=4.0.0, stat=Deferred: Connection timed out with c.mx.mail.yahoo.com.
Jun 2 17:39:50 sajo-laptop sm-mta[9149]: o51I8ieV004377: to=, ctladdr= (33/33), delay=1+06:31:06, xdelay=00:03:57, mailer=esmtp, pri=6601668, relay=alt4.gmail-smtp-in.l.google.com. [74.125.79.114], dsn=4.0.0, stat=Deferred: Connection timed out with alt4.gmail-smtp-in.l.google.com.
Jun 2 17:40:01 sajo-laptop CRON[9523]: (smmsp) CMD (test -x /etc/init.d/sendmail && /usr/share/sendmail/sendmail cron-msp)
Czy ktoś wie, jak mogę trwale pozbyć się tych wiadomości? Na marginesie chciałbym również wiedzieć, czy istnieje sposób skonfigurowania sendmail
„fałszywego” wysyłania wiadomości e-mail. Jest tu?
Odpowiedzi:
Wiadomości, które zostały wysłane lub próbują zostać wysłane, są przechowywane w
/var/spool/mqueue
. Wiadomości, których Sendmail jeszcze nie próbował w kolejce, można znaleźć w/var/spool/mqueue-client
.Więc spróbuj tego (zakładam, że chcesz pozbyć się wszystkich wiadomości w kolejce):
rm /var/spool/mqueue/*
rm /var/spool/mqueue-client/*
.Spowoduje to wyczyszczenie folderów w kolejce, dopóki system nie otrzyma kolejnej wiadomości. Możesz sprawdzić dwukrotnie, uruchamiając
mailq
(oba foldery w kolejce) lubsendmail -bp
(tylko folder w kolejce).UWAGA: W przypadku większości dystrybucji Linuksa usługi można uruchamiać / zatrzymywać za pomocą
service sendmail <start|stop|restart>
lub/etc/init.d/sendmail <start|stop|restart>
. Obie opcje mają wiele innych flag stanu, które można zaobserwować, wpisując polecenie i usługę bez flag statusu.źródło
no matches found
). Udostępniłem więcchmod
foldery777
i mogłem usunąć zawartość.Często znajdziesz sugestię, aby usunąć pliki z katalogu mqueue Sendmaila, na przykład
rm /var/spool/mqueue/*
lub gorzej (rm -rf
itp.). IMHO, to jest po prostu niebezpieczne. Będzie działać w wielu przypadkach, ale zalecamy zapięcie pasów bezpieczeństwa. Proste usunięcie wszystkich plików z mqueue może usunąć wiarygodne wiadomości.Zatrzymanie Sendmaila przed usunięciem wiadomości oczekujących w kolejce jest dobrą radą, zwłaszcza jeśli trzeba usunąć wiele wiadomości. Jednak jeśli tylko kilka wiadomości ma zostać usuniętych lub jeśli kolejka jest regularnie czyszczona, np. Za pomocą zadania cron, w rzeczywistości nie ma potrzeby zatrzymywania Sendmaila. W najgorszym przypadku jedna z wiadomości zostanie ponownie umieszczona w kolejce, która prawie na pewno zostanie usunięta przy ponownej próbie.
Przeciwnie, zatrzymanie Sendmaila (np. W Ubuntu z
service sendmail stop
) może nie być wystarczające. Nawet po zatrzymaniu niektóre (potomne) procesy mogą nadal działać. Trzeba będzie poczekać, aż skończą (zalecane) lub zabić ich.Aby bezpiecznie usunąć wiadomości z mqueue, potrzebujesz identyfikatorów kolejki wiadomości. Identyfikatory są wyświetlane w dzienniku po „sm-mta [...]:”. Identyfikatory z fragmentu dziennika to
o530SlbK009365
,o4VHn3cw003597
... Dla każdego z identyfikatorów 2 pliki są przechowywane w mqueue, jeden zaczynający się na „qf”, a drugi na „df”.mailq
służy zwykle do wyświetlania zawartości kolejki. Pokazuje identyfikatory w pierwszej kolumnie. Co więcej, powinieneś skonsultowaćmailq
wyniki, ponieważ pokazuje również, czy komunikat jest aktywny / jest aktualnie przetwarzany. Na przykładW tym przykładzie wiadomość z identyfikatorem
oBDDuKAB023946
jest obecnie przetwarzana, pokazana przez dołączoną gwiazdkę. Inne wiadomości można bezpiecznie usunąć. Na przykład, aby usunąć wiadomość zoBAEMuV8000429
użyciem identyfikatoraBardziej wszechstronne podejście do usuwania wiadomości w kolejce zapewnia Brandon Hutchinson w sekcji Usuwanie poczty z kolejki pocztowej . Brandon zawiera również skrypty do usuwania wiadomości opartych na części domeny, adresie e-mail itp. Skrypty Brandona są bardzo pomocne przy regularnym czyszczeniu lub masowym usuwaniu.
Niemniej jednak nawet skrypty Brandona nie dbają o status wiadomości. Łatwo to jednak dodać. Uwzględnij na początku jego scenariuszy
Następnie na początku podprogramu „chciał” dodać zaznaczenie, aby pominąć aktywne wiadomości, np. Za pomocą
HTH. I pamiętaj, aby tworzyć kopie zapasowe :-)
źródło
Miałem ten sam problem i stwierdziłem, że były 2 foldery z kolejkami wiadomości. Folder / var / spool / clientmqueue / zawierał wiadomości, które kończyły się w / var / spool / mqueue /, jeśli nie zostały dostarczone. Usunięcie plików z obu folderów było konieczne do rozwiązania problemu.
rm -f / var / spool / clientmqueue / * rm -f / var / spool / mqueue / *
źródło
Nie sądzę, że jest to dzieło skryptu cron, bardziej prawdopodobne jest, że jest to problem z aplikacją lub coś związanego z samym sendmailem; tak czy inaczej, aby wykluczyć jakąkolwiek pracę crona, robiąc to, możesz po prostu zatrzymać się
crond
na chwilę i sprawdzić, czy tak się dzieje.źródło
Udało mi się to zrobić za pomocą tego skryptu bash
źródło
echo
i pobrać dane wyjściowe wspomnianegoecho
do użycia jako parametr dorm
. Nawet ignorowanie darmowych widelcówsudo
irm
ta podpowłoka jest po prostu marnotrawstwem.sudo find /var/spool/mqueue -maxdepth 1 -delete
. Uważam, że ważne jest wskazanie, co jest szczególnie problematyczne w twoim skrypcie. Przepraszamy za brak taktu.