ฉันจะวัดระยะเวลาที่สคริปต์ของฉันใช้ในการรันและรวมไว้ในอีเมลที่สร้างขึ้นได้อย่างไร


11

ฉันมีสคริปต์ทุบตีง่ายๆที่ทำงานชุดของการตรวจสอบ (กping, nslookupฯลฯ ) แล้วส่งรายงานอีเมลที่มีการส่งออกของข้อมูลว่า

ฉันต้องการให้อีเมลรวมข้อมูลว่าต้องใช้เวลานานเท่าใดในการเรียกใช้สคริปต์ทั้งหมด มีวิธีง่าย ๆ ในการรวบรวมข้อมูลหรือไม่

คำตอบ:


15

ฉันขอแนะนำให้ดูbashตัวแปรSECONDS:

วินาที : ทุกครั้งที่มีการอ้างอิงพารามิเตอร์นี้จำนวนวินาทีตั้งแต่การเรียกใช้เชลล์ส่งคืน หากค่าถูกกำหนดให้กับ SECONDS ค่าที่ส่งคืนจากการอ้างอิงที่ตามมาคือจำนวนวินาทีตั้งแต่การกำหนดบวกค่าที่กำหนด

ดังนั้นคุณสามารถพิมพ์ตัวแปรนี้ในตอนท้ายของสคริปต์ อีกทางหนึ่งถ้าคุณตั้งใจจะวัดเวลาของโปรแกรมเพียงส่วนหนึ่งจากนั้นให้ตั้งค่าSECONDS=0ที่จุดเริ่มต้นของบล็อกคำสั่งที่วัดได้และท้ายที่สุดให้ใช้ค่าที่เก็บไว้ในตัวแปรนี้


ฉันไม่เคยรู้เกี่ยวกับ$SECONDS; เยี่ยมมาก! หากต้องการเพิ่มสิ่งนี้คุณสามารถแปลงวินาทีเป็นชั่วโมง: นาที: วินาทีกับสิ่งที่ต้องการdate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'(ดูman dateตัวเลือกการจัดรูปแบบเพิ่มเติม)
Sparhawk

ฉันชอบวิธีนี้มาก แต่ก็ยังสับสนอยู่ สมมติว่าฉันเรียกใช้สคริปต์เดียวกันสองสามวินาทีนอกเหนือจากกัน หากฉันตั้งค่าSECONDS=0หนึ่งสคริปต์และเหมือนกันในอีกสคริปต์หนึ่งพวกเขาจะรบกวนกันและกันหรือไม่
Mike B

3
ไม่เป็นไร - ฉันสะดุดกับคำติชมของทอมในโพสต์สแต็คโอเวอร์โฟลว์ ( stackoverflow.com/a/5153036/344780 ) ซึ่งลบความแตกต่างเป็นSTART_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))หลัก ดูเหมือนว่าจะมีความยืดหยุ่นมากกว่าเล็กน้อยสำหรับการใช้งานพร้อมกัน
Mike B

8

คำนำหน้าคำสั่งของคุณด้วย/usr/bin/timeและคำสั่งเวลาจะส่งออกเวลาที่เอาสคริปต์ให้ทำงาน นี่คือแบบพกพามากกว่าการใช้สิ่งที่bashเฉพาะเจาะจง


6

ในขณะที่ใช้SECONDSและtimeจะให้ค่าสัมพัทธ์กับคุณ date '+%Y%m%d%H%M%S.%N'หากคุณต้องการที่จะมีค่าแน่นอนสำหรับการตรวจสอบและการรายงานวัตถุประสงค์ว่าเมื่อวิ่งสคริปต์และเมื่อมันเสร็จสมบูรณ์แล้วคุณอาจต้องการที่จะลองอะไรเช่นนี้มาก่อนและหลังคำสั่งของคุณ สิ่งนี้ยังช่วยให้คุณมีรายละเอียดที่ดีกว่าเนื่องจากสามารถจับความแตกต่างของช่วงเวลาย่อยได้เนื่องจากคุณมีคำสั่งpingที่ปกติจะใช้งานได้ภายในหนึ่งวินาที


1

ซ้อนสคริปต์ของคุณ ในการส่งอีเมลมีตัวเลือกมากมาย ฉันชอบ msmtp สำหรับสิ่งนี้คุณสามารถกำหนดส่วนหัวของคุณเอง "นี่" สไตล์ (อินไลน์) หรือใช้ไฟล์แยกต่างหากและรวมเข้าด้วยกัน มีทุกประเภทของทางเลือกนี้เกี่ยวข้องกับ Perl, หลาม ฯลฯ

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 ได้

ทางเลือกที่น่าเกลียดมากสำหรับการดำเนินการ "batchy" ในชั่วข้ามคืนกล่าวคือการสร้าง cronjob และเอาต์พุตจะถูกส่งอีเมลแทน stdout / stderr

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.