यह कैसे माप सकता है कि मेरी स्क्रिप्ट को चलाने और उसे ईमेल में शामिल करने में कितना समय लगता है?


11

मैं एक साधारण बैश स्क्रिप्ट चेक (की एक श्रृंखला चलाता है ping, nslookup, आदि) और फिर उस डेटा के उत्पादन के साथ एक ईमेल रिपोर्ट भेजता है।

मुझे ईमेल की जानकारी चाहिए कि पूरी स्क्रिप्ट को चलाने में कितनी देर लगी। क्या उस जानकारी को एकत्र करने का एक आसान तरीका है?

जवाबों:


15

मैं bashचर पर एक नज़र डालने का सुझाव देता हूं SECONDS:

SECONDS : हर बार जब इस पैरामीटर को संदर्भित किया जाता है, शेल इनवोकेशन के बाद से सेकंड की संख्या वापस आ जाती है। यदि कोई मान SECONDS को सौंपा गया है, तो बाद के संदर्भों पर लौटाया गया मान असाइन किए गए प्लस और असाइन किए गए मान के बाद से सेकंड की संख्या है।

इस प्रकार आप इस चर को स्क्रिप्ट के अंत में प्रिंट कर सकते हैं। वैकल्पिक रूप से, यदि आपका इरादा कार्यक्रम के केवल भाग के समय को मापने का है, तो बस SECONDS=0कमांड के मापा ब्लॉक की शुरुआत में सेट करें, और अंत में इस चर में संग्रहीत मान का उपयोग करें।


मुझे कभी पता नहीं चला $SECONDS; यह बहुत अच्छा है! इसे जोड़ने के लिए, आप सेकंड को घंटों: मिनटों में बदल सकते हैं: कुछ के साथ सेकंड जैसे date -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'( man dateअधिक स्वरूपण विकल्पों के लिए देखें )।
स्पार्कवॉक

मैं वास्तव में इस दृष्टिकोण को पसंद करता हूं लेकिन मैं अभी भी थोड़ा भ्रमित हूं। मान लीजिए कि मैं एक ही स्क्रिप्ट को एक दूसरे के अलावा कुछ सेकंड चलाता हूं। अगर मैं SECONDS=0एक स्क्रिप्ट और दूसरी स्क्रिप्ट पर एक ही चीज़ सेट करता हूं , तो क्या वे एक दूसरे के साथ हस्तक्षेप करेंगे?
माइक बी

3
कोई बात नहीं - मैं एक स्टैक ओवरफ्लो पोस्ट ( stackoverflow.com/a/5153036/344780 ) में टॉम की प्रतिक्रिया पर ठोकर खाई, जो अनिवार्य रूप से अंतर को घटाता है START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))। यह एक साथ उपयोग के लिए थोड़ा अधिक लचीला लगता है।
माइक बी

8

अपनी कमांड को प्रीफ़ाइंड करें /usr/bin/timeऔर समय कमांड स्क्रिप्ट को चलाने के लिए लगने वाले समय को आउटपुट करेगा। यह कुछ bashविशिष्ट उपयोग करने की तुलना में अधिक पोर्टेबल है ।


6

उपयोग करते समय SECONDSऔर timeआपको सापेक्ष मूल्य देंगे। यदि आप ऑडिटिंग और रिपोर्टिंग प्रयोजनों के लिए पूर्ण मान रखना चाहते हैं, जब स्क्रिप्ट चलती थी और जब यह पूरी हो जाती है, तो आप अपने आदेशों से पहले और बाद में कुछ इस तरह की कोशिश करना चाह सकते हैं date '+%Y%m%d%H%M%S.%N'। यह आपको एक बेहतर ग्रैन्युलैरिटी भी दे सकता है क्योंकि यह उप-सेकंड के अंतरों को पकड़ सकता है क्योंकि आपके पास ऐसी आज्ञाएं हैं pingजो सामान्य रूप से एक सेकंड के भीतर निष्पादित होती हैं।


1

अपनी स्क्रिप्ट को नेस्ट करें। ईमेल भेजने के लिए कई विकल्प हैं। मैं व्यक्तिगत रूप से इसके लिए msmtp का पक्ष लेता हूं, आप हेडर को "यहां" शैली (इनलाइन) को परिभाषित कर सकते हैं या एक अलग फाइल का उपयोग कर सकते हैं और उन्हें एक साथ जोड़ सकते हैं। इस से जुड़े सभी प्रकार के विकल्प हैं जिनमें पर्ल, पायथन आदि शामिल हैं।

Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: somebody@somewhere.else
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"

पीछे की खाली लाइन महत्वपूर्ण है। अपने इकट्ठे संदेश को msmtp में काटें:

cat assembled.eml | msmtp somebody@somewhere.else

एक निराशावादी समय की उचित संख्या तक सफलता पा लेता है।

पेलोड html भी हो सकता है, और php जेनरेट किया जा सकता है।

रात भर "बैची" ऑपरेशन के लिए एक बहुत ही बदसूरत विकल्प कहते हैं कि क्रोनजॉब बनाना है और आउटपुट को stdout / stderr के बदले में ईमेल किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.