मैं Sendmail कतार में स्थायी रूप से ई-मेल संदेश कैसे हटाऊं और उन्हें वापस आने से रोकूं?


18

मुझे यहाँ बहुत कष्टप्रद समस्या है। मैं एक एप्लिकेशन का परीक्षण कर रहा हूं और ई-मेल पते को फर्जी करने के लिए कुछ परीक्षण ई-मेल बनाए हैं (यह उल्लेख नहीं करने के लिए कि मेरा सर्वर वास्तव में ई-मेल भेजने के लिए सेट नहीं है)। बेशक, sendmailइन संदेशों को भेजने में सक्षम नहीं है और वे sendmailकतार में फंस गए हैं। मैं उन संदेशों को मैन्युअल रूप से हटाना चाहता हूं जो कतार में खड़े होने के बजाय 5 दिनों तक इंतजार कर रहे हैं जो sendmailआमतौर पर रिट्रीट करने से रोकते हैं।

मैं उबंटू 10.04 का उपयोग कर रहा हूं और /var/spool/mqueue/वह निर्देशिका है जिसमें मैंने कैसे पढ़ा है, प्रत्येक ई-मेल जो कतारबद्ध है, उसे रखा जाता है। जब मैं इस निर्देशिका में फ़ाइलों को हटाता हूं, sendmailतब तक ई-मेल को संसाधित करने की कोशिश करना बंद कर देता है जब तक कि एक क्रोन स्क्रिप्ट चलता नहीं दिखता है और इस निर्देशिका को उन संदेशों के साथ फिर से आबाद करता है जिन्हें मैं नहीं भेजना चाहता हूं। यहाँ मेरी कुछ पंक्तियाँ हैं 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)

क्या किसी को पता है कि मैं इन संदेशों से स्थायी रूप से कैसे छुटकारा पा सकता हूं? एक साइड नोट के रूप में, मैं यह भी जानना चाहूंगा कि क्या sendmailई-मेल भेजने के लिए "नकली" सेट करने का कोई तरीका है । है?


खैर, मुझे अभी भी इस समस्या का कोई हल नहीं मिला है। यह निश्चित रूप से लग रहा है कि यह क्रोन स्क्रिप्ट का कुछ प्रकार है जो इसे होने का कारण बन रहा है, लेकिन मैं यह पता नहीं लगा सकता कि यह कतारबद्ध संदेशों को कहां संग्रहीत कर रहा है ...
स्टीवन ऑक्सले

जवाबों:


28

जो संदेश भेजे गए हैं या भेजे जाने की कोशिश कर रहे हैं, वे संग्रहीत हैं /var/spool/mqueue। संदेश जो Sendmail ने अभी तक कतार में लगाने की कोशिश नहीं की है वह अंदर मिल सकता है /var/spool/mqueue-client

तो यह कोशिश करो (मुझे लगता है कि आप कतार में सभी संदेशों से छुटकारा चाहते हैं ):

  • Sendmail बंद करो
  • rm /var/spool/mqueue/*
  • आप इंतजार में संदेशों को निकालना चाहते हैं, rm /var/spool/mqueue-client/*
  • Sendmail शुरू करें

जब तक सिस्टम एक और संदेश प्राप्त नहीं कर लेता, तब तक यह आपके कतार फ़ोल्डर को साफ कर देगा। आप mailq(दोनों कतार फ़ोल्डर), या sendmail -bp(केवल कतार फ़ोल्डर) चलाकर दोहरी जांच कर सकते हैं ।

नोट: अधिकांश लिनक्स वितरण के साथ आप सेवाओं को शुरू service sendmail <start|stop|restart>या बंद कर सकते हैं /etc/init.d/sendmail <start|stop|restart>। दोनों विकल्पों में कई अन्य स्टेटस फ्लैग होते हैं, जिन्हें स्टेटस फ्लैग के बिना कमांड और सर्विस में टाइप करके देखा जा सकता है।


उन्होंने कहा कि वह पहले ही ऐसा कर चुके हैं, लेकिन संदेश फिर से दिखाई दिए ...
मासिमो

1
लेकिन पहले बिना भेजने के बिना, यह बात है।
weeheavy

ठीक है, ऐसा प्रतीत होता है कि आप मेरे याद किए गए कदम पर आ गए होंगे।
स्टीवन ऑक्सले

फेडोरा 19 पर, मैं देखता हूं / var / स्पूल / क्लाइंटमेक्यू (और साथ ही / var / स्पूल / mqueue)
टॉम

किसी कारण से सूडो के साथ भी यह मेरे लिए काम नहीं करेगा (यह कहेंगे no matches found)। तो मैं chmodकरने के लिए फ़ोल्डर एड 777और फिर सामग्रियों को हटाना करने में सक्षम था।
श्रीधर सरनोबत

9

उदाहरण के लिए rm /var/spool/mqueue/*या बदतर ( rm -rfआदि) के साथ आपको अक्सर Sendmail की mqueue निर्देशिका से फ़ाइलों को हटाने का सुझाव मिलेगा । IMHO, यह सादा खतरनाक है। यह कई मामलों में काम करेगा लेकिन मैं आपकी सीट बेल्ट को जकड़ने की सलाह देता हूं। बस mqueue से सभी फ़ाइलों को हटाने से वैध संदेश नष्ट हो सकते हैं।

कतारबद्ध संदेशों को हटाने से पहले Sendmail को रोकने के लिए विशेष रूप से अच्छी सलाह है यदि कई संदेशों को हटाने की आवश्यकता है। हालाँकि, यदि केवल कुछ संदेश हटाए जाने हैं या यदि कतार को नियमित आधार पर साफ किया जाता है जैसे कि क्रॉन जॉब के माध्यम से तो वास्तव में सेंडमेल को रोकने की कोई आवश्यकता नहीं है। सबसे खराब स्थिति में संदेशों में से एक को फिर से कतारबद्ध किया जाएगा जो आपके दोबारा प्रयास करने पर लगभग निश्चित रूप से हटा दिया जाएगा।

इसके विपरीत, Sendmail (जैसे Ubuntu के साथ service sendmail stop) को रोकना पर्याप्त नहीं हो सकता है। यहां तक ​​कि जब कुछ (बच्चे) प्रक्रियाओं को रोक दिया जाता है तब भी चल सकता है। एक को तब तक इंतजार करना होगा जब तक वे समाप्त (अनुशंसित) या उन्हें मार नहीं देते।

संदेशों को सुरक्षित रूप से mqueue से हटाने के लिए आपको संदेशों की कतार आईडी की आवश्यकता होती है। आईडी को "sm-mta [...]:" के बाद लॉग में दिखाया जाता है। आपके लॉग अंश से आईडी हैं o530SlbK009365, o4VHn3cw003597... प्रत्येक आईडी के लिए 2 फाइलें mqueue में संग्रहीत की जाती हैं, एक "qf" से शुरू होती है, दूसरी "df" से शुरू होती है।

mailqआमतौर पर कतार की सामग्री को सूचीबद्ध करने के लिए उपयोग किया जाता है। यह पहले कॉलम में आईडी दिखाता है। इसके अलावा, आपको mailqआउटपुट से परामर्श करना चाहिए क्योंकि यह यह भी दर्शाता है कि क्या कोई संदेश सक्रिय है / वर्तमान में संसाधित किया जा रहा है। उदाहरण के लिए

-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------
oBDDuKAB023946*    1058 Mon Dec 13 14:56 <vfn-l-bounces+so=example.com@fam.tuwi
                 (Deferred: 450-4.2.1 The user you are trying to contact is re)
                                         <so@example.com>
oBAEMuV8000429     1058 Fri Dec 10 15:22 <vfn-l-bounces+sby=example.com@fam.tuw
                 (Deferred: 450-4.2.1 The user you are trying to contact is re)
                                         <so@example.com>

इस उदाहरण में आईडी के साथ संदेश oBDDuKAB023946को वर्तमान में संसाधित किया जा रहा है, जो एपेंडर्ड तारांकन द्वारा दिखाया गया है। अन्य संदेश हटाए जाने के लिए सुरक्षित हैं। उदाहरण के लिए, आईडी oBAEMuV8000429उपयोग के साथ संदेश को हटाने के लिए

rm /var/spool/mqueue/{d,q}foBAEMuV8000429

कतारबद्ध संदेशों को हटाने के लिए अधिक बहुमुखी दृष्टिकोण ब्रैंडन हचिंसन द्वारा मेल कतार से मेल हटाने में प्रदान किया जाता है । ब्रैंडन में डोमेन भाग, ईमेल पते आदि के आधार पर संदेशों को हटाने के लिए स्क्रिप्ट भी शामिल हैं। ब्रैंडन की स्क्रिप्ट नियमित सफाई या बड़े पैमाने पर हटाने के लिए बहुत सहायक हैं।

फिर भी, ब्रैंडन की लिपियाँ भी संदेशों की स्थिति का ध्यान नहीं रख रही हैं। हालाँकि, इसे जोड़ना आसान है। उनकी स्क्रिप्ट की शुरुआत में शामिल करें

# Get current mailq status
my $mailq = `mailq`;

फिर, उप दिनचर्या की शुरुआत में "चाहता था" सक्रिय संदेशों को छोड़ने के लिए एक चेक जोड़ें, उदाहरण के लिए

# skip if file is currently processed by MTA
if ($mailq =~ /\n$queue_id\*/) {
   $debug && print "$queue_id is locked.\n";
   last;
}

HTH। और, बैकअप बनाने के लिए याद रखना :-)


4

मुझे यही समस्या थी और पाया कि पंक्तिबद्ध संदेशों के साथ 2 फ़ोल्डर थे। फ़ोल्डर / var / स्पूल / क्लायंटक्यू / में ऐसे संदेश थे जो / var / स्पूल / mqueue / में समाप्त हो रहे थे यदि वे वितरित करने में विफल रहे। समस्या को हल करने के लिए दोनों फ़ोल्डरों से फ़ाइलों को हटाना आवश्यक था।

rm -f / var / स्पूल / क्लाइंटमेक्यु / * rm -f / var / स्पूल / mqueque / *


0

मुझे नहीं लगता कि यह एक क्रोन स्क्रिप्ट का काम है, यह एक आवेदन मुद्दा होने की अधिक संभावना है, या खुद को भेजने के लिए संबंधित कुछ; वैसे भी, किसी भी क्रॉन जॉब को करने के लिए, आप बस crondकुछ समय के लिए रुक सकते हैं और देख सकते हैं कि क्या ऐसा हो रहा है।


0

मैं इस बैश स्क्रिप्ट का उपयोग करके ऐसा करने में कामयाब रहा

for i in `sudo ls /var/spool/mqueue`
do
    sudo rm -rv `echo /var/spool/mqueue/$i`
done

तो आप एक सबमिशन खोलने के लिए एक पैरामीटर के रूप में उपयोग के लिए echoकहा और प्राप्त करने के उत्पादन को पुनः प्राप्त करते हैं । यहां तक ​​कि के gratuitous कांटे की अनदेखी और , इस उपखंड सादे बेकार है। echormsudorm
फेलिक्स फ्रैंक 10

ठीक है, अगर आपके पास एक अधिक 'स्वीकार्य' समाधान है, तो यह समय बर्बाद करने के बजाय अपने समाधान की व्याख्या करने के लिए न केवल यह दर्शाता है कि एक टिप्पणी कितनी बेकार हो सकती है। अग्रिम धन्यवाद
शु Hikari

2
क्षमा करें यदि यह आपत्तिजनक और घमंडी है। एक अधिक आर्थिक दृष्टिकोण होगा sudo find /var/spool/mqueue -maxdepth 1 -delete। मुझे यह बताना महत्वपूर्ण लगा कि विशेष रूप से आपकी स्क्रिप्ट के साथ क्या समस्या है। चातुर्य की कमी के लिए क्षमा याचना।
फेलिक्स फ्रैंक

2
हां, लेकिन अब आपने अपनी बात समझाई और मैंने इसे पूरी तरह से समझा। और माफी स्वीकार की, चिंता मत करो। साभार: D
शु हिकारी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.