2008-10-22 25 views
9

लिनक्स सर्वर पर पोस्टफिक्स स्थापना की निगरानी करने के लिए एक अच्छा आदेश क्या है? यह एक कमांड होना चाहिए जिसे एक एसएसएच सत्र में कमांड प्रॉम्प्ट से चलाया जा सकता है और पोस्टफिक्स प्रक्रिया सक्रिय है या प्रासंगिक मेल कतारों का आकार इस बारे में जानकारी देता है।पोस्टफिक्स एमटीए स्थिति की निगरानी कैसे करें

संपादित

इस विषय पर स्टैक ओवरफ़्लो के लिए (हो सकता है कि सर्वर दोष? के लिए बेहतर) प्रतीत नहीं सकता है लेकिन यह सॉफ्टवेयर विकास से संबंधित है। उस समय, मैं एक जटिल मेल प्रेषक एप्लिकेशन बना रहा था जिसने मेल वितरण के लिए कई एमटीए का इस्तेमाल किया था। यदि एक सर्वर पर मेल कतार बहुत बड़ी हो गई है, तो इसे अन्य, कम व्यस्त एमटीए पसंद करना चाहिए। इसलिए, नियंत्रण अनुप्रयोग को प्रत्येक एमटीए को एसएसएच कनेक्शन बनाए रखने और समय-समय पर इसकी स्थिति की निगरानी करने के लिए एक तरीका चाहिए।

यदि निगरानी की आवश्यकता प्रशासनिक उद्देश्यों के लिए थी, तो बहुत सारे जीयूआई उपकरण हैं जो अधिक आसानी से करते हैं।

उत्तर

17

आप कमांड लाइन प्रोग्राम हैं जो पोस्टफिक्स के साथ आते हैं का उपयोग कर सकते हैं:

  • mailq: दिखाती है कि कौन कतारों मेल किया जा रहा 'संसाधित'
  • postqueue -p: क्या वास्तव में संदर्भ देता mailq
  • postqueue है - च: flushes सभी मेल पंक्तिबद्ध, तुरंत वितरित
  • ps aux प्राप्त करने की कोशिश:, सर्वर पर चल रही प्रक्रियाओं शो जैसी चीजों के लिए लग रही है:
    • smtpd
    • proxymap
    • निहाई
    • तुच्छ-पुनर्लेखन
    • qmgr
    • पिक
    • showq

आप ps कमांड के साथ क्या लगता है आप कैसे पर निर्भर करती है चीजों को सेट करें।

5

वरीयता के क्रम में:

सबसे अच्छा तरीका मेल सर्वर के माध्यम हार्टबीट संदेश भेजने और गंतव्य पर उनके आगमन पर नजर रखने के लिए है।

कतारों की निगरानी के लिए मेलक और qshape (हाल के पोस्टफिक्स वितरण के साथ भेज दिया गया) का उपयोग करें।

आपको लगता है कि smtpd जांच कर सकते हैं सुनने और netcat का उपयोग कर एक बैनर लौटा रहा है (netcat करने के लिए विकल्पों ओएस के हिसाब से बदलती है, इन लिनक्स के लिए कर रहे हैं):

 
nc -w 1 localhost 25 </dev/null 

निम्नलिखित प्रत्येक पोस्टफ़िक्स डेमॉन के लिए प्रक्रियाओं की संख्या रिपोर्ट करेंगे , मास्टर द्वारा समूहित (यदि आपके पास एकाधिक पोस्टफिक्स उदाहरण हैं तो एकाधिक स्वामी)।

ps -e -o pid,ppid,fname | perl -lane ' 
    if ($F[1] != 1) { 
     ++$c{$F[1]}->{$F[2]}; 
    } elsif ($F[2] eq "master") { 
     push(@masters, $F[0]); 
    } 
    END { 
     foreach $master (@masters) { 
      print "=== master: $master ==="; 
      foreach $agent (keys %{$c{$master}}) { 
       printf "\t%-5d %s\n", $c{$master}->{$agent}, $agent; 
      } 
     } 
    } 
' 
5

ब्रायन रेबेन के उत्तर के अलावा, यहां एक स्क्रिप्ट है जिसका उपयोग मैं पोस्टफिक्स कतार लंबाई की निगरानी के लिए करता हूं। कतार में एक्स संदेशों से परे बढ़ने के बाद यह सब एक ईमेल अलर्ट भेजता है।अलर्ट एमएसएमटीपी (एक छोटी कमांड लाइन एसएमटीपी क्लाइंट) का उपयोग करके भेजा जाता है, इसलिए यह स्थानीय पोस्टफिक्स इंस्टॉलेशन को छोड़ देता है (यदि आप अपनी कतार बढ़ रहे हैं तो आप समय-समय पर अपनी अलर्ट प्राप्त करने के लिए भरोसा नहीं कर सकते हैं ...)

#!/bin/bash 
# 
# Postfix queue length monitoring script (requires msmtp) 
# 
# This script checks the active, incoming, deferred and maildrop postfix queue directories. 
# 
# If the number of messages in any of these directories is more than $MAX_QUEUE_LENGTH, 
# the script will generate an alert email and send it using msmtp. We use msmtp so that 
# we can bypass the local postfix installation (since if the queues are getting big, 
# the alert email may not be sent in time to catch the problem). 
# 

######################################################### 
# SET SCRIPT VARS 
######################################################### 

# Path to msmtp binary (e.g. /usr/bin/msmtp on Debian systems) 
MSMTP=/usr/bin/msmtp 

# Remote mail host (this is the mail server msmtp will use to send the alert. It should NOT be the local postfix installation) 
MAILHOST=backup.mailserver.com 

# Remote mail port 
MAILPORT=25 

# Mail protocol 
MAILPROTO=smtp 

# Fully qualified domain name of local postfix installation 
DOMAIN=primary.mailserver.com 

# From address 
[email protected] 

# Recipient (this address should not route to the local postfix installation, for obvious reasons) 
MAILTO="[email protected]" 

# Email subject 
MAILSUBJECT="Postfix queue length alert for ${DOMAIN}" 

# MSMTP log file 
LOGFILE=/var/log/msmtp.log 

# Root of the postfix queue dirs (e.g. /var/spool/postfix on Debian systems). Note: no trailing slash. 
QUEUEDIR_ROOT="/var/spool/postfix" 

# Max queue length (if there are more messages in a queue than this number, we will send an alert) 
MAX_QUEUE_LENGTH=10 


######################################################### 
# SCRIPT LOGIC STARTS HERE 
######################################################### 

# Check msmtp binary exists 
if [ ! -f ${MSMTP} ] 
then 
     echo "Cannot find ${MSMTP}. Exiting." 
     exit 1 
fi 

# Get the number of messages sitting in each postfix queue directory 
Q_ACTIVE=$(find ${QUEUEDIR_ROOT}/active -type f | wc -l) 
Q_INCOMING=$(find ${QUEUEDIR_ROOT}/incoming -type f | wc -l) 
Q_DEFERRED=$(find ${QUEUEDIR_ROOT}/deferred -type f | wc -l) 
Q_MAILDROP=$(find ${QUEUEDIR_ROOT}/maildrop -type f | wc -l) 

# If any of these queues contain more than $MAX_QUEUE_LENGTH issue an alert 
if [ ${Q_ACTIVE} -gt ${MAX_QUEUE_LENGTH} -o ${Q_INCOMING} -gt ${MAX_QUEUE_LENGTH} -o ${Q_DEFERRED} -gt ${MAX_QUEUE_LENGTH} -o ${Q_MAILDROP} -gt ${MAX_QUEUE_LENGTH} ]; then 

    (
     echo "From: ${MAILFROM} " 
     echo "To: ${MAILTO} " 
     echo "Mime-Version: 1.0" 
     echo 'Content-Type: text/plain; charset="iso-8859-1"' 
     echo "Subject: ${MAILSUBJECT}" 
     echo "" 
     echo "One or more of the postfix queues on ${DOMAIN} has grown beyond ${MAX_QUEUE_LENGTH} messages in length." 
    ) | ${MSMTP} --host=${MAILHOST} --port=${MAILPORT} --protocol=${MAILPROTO} --domain=${DOMAIN} --auth=off --tls=off --from=${MAILFROM} --logfile=${LOGFILE} --syslog=off --read-recipients 

    exit 2 

fi 

exit 0 
+0

यह भी उल्लेखनीय है कि एमएसएमटीपी टीएलएस/एसएसएल का समर्थन करता है और उपयोगकर्ता नाम/पासवर्ड निर्दिष्ट करता है। तो, उदाहरण के लिए, यदि आप चाहें तो जीमेल खाते के माध्यम से अलर्ट ईमेल भेजने के लिए आप स्क्रिप्ट को थोड़ा सा पुनः प्राप्त कर सकते हैं। – corford

संबंधित मुद्दे