ฉันมีสคริปต์ทุบตีง่ายๆที่ทำงานชุดของการตรวจสอบ (กping
, nslookup
ฯลฯ ) แล้วส่งรายงานอีเมลที่มีการส่งออกของข้อมูลว่า
ฉันต้องการให้อีเมลรวมข้อมูลว่าต้องใช้เวลานานเท่าใดในการเรียกใช้สคริปต์ทั้งหมด มีวิธีง่าย ๆ ในการรวบรวมข้อมูลหรือไม่
ฉันมีสคริปต์ทุบตีง่ายๆที่ทำงานชุดของการตรวจสอบ (กping
, nslookup
ฯลฯ ) แล้วส่งรายงานอีเมลที่มีการส่งออกของข้อมูลว่า
ฉันต้องการให้อีเมลรวมข้อมูลว่าต้องใช้เวลานานเท่าใดในการเรียกใช้สคริปต์ทั้งหมด มีวิธีง่าย ๆ ในการรวบรวมข้อมูลหรือไม่
คำตอบ:
ฉันขอแนะนำให้ดูbash
ตัวแปรSECONDS
:
วินาที : ทุกครั้งที่มีการอ้างอิงพารามิเตอร์นี้จำนวนวินาทีตั้งแต่การเรียกใช้เชลล์ส่งคืน หากค่าถูกกำหนดให้กับ SECONDS ค่าที่ส่งคืนจากการอ้างอิงที่ตามมาคือจำนวนวินาทีตั้งแต่การกำหนดบวกค่าที่กำหนด
ดังนั้นคุณสามารถพิมพ์ตัวแปรนี้ในตอนท้ายของสคริปต์ อีกทางหนึ่งถ้าคุณตั้งใจจะวัดเวลาของโปรแกรมเพียงส่วนหนึ่งจากนั้นให้ตั้งค่าSECONDS=0
ที่จุดเริ่มต้นของบล็อกคำสั่งที่วัดได้และท้ายที่สุดให้ใช้ค่าที่เก็บไว้ในตัวแปรนี้
SECONDS=0
หนึ่งสคริปต์และเหมือนกันในอีกสคริปต์หนึ่งพวกเขาจะรบกวนกันและกันหรือไม่
START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))
หลัก ดูเหมือนว่าจะมีความยืดหยุ่นมากกว่าเล็กน้อยสำหรับการใช้งานพร้อมกัน
คำนำหน้าคำสั่งของคุณด้วย/usr/bin/time
และคำสั่งเวลาจะส่งออกเวลาที่เอาสคริปต์ให้ทำงาน นี่คือแบบพกพามากกว่าการใช้สิ่งที่bash
เฉพาะเจาะจง
ในขณะที่ใช้SECONDS
และtime
จะให้ค่าสัมพัทธ์กับคุณ date '+%Y%m%d%H%M%S.%N'
หากคุณต้องการที่จะมีค่าแน่นอนสำหรับการตรวจสอบและการรายงานวัตถุประสงค์ว่าเมื่อวิ่งสคริปต์และเมื่อมันเสร็จสมบูรณ์แล้วคุณอาจต้องการที่จะลองอะไรเช่นนี้มาก่อนและหลังคำสั่งของคุณ
สิ่งนี้ยังช่วยให้คุณมีรายละเอียดที่ดีกว่าเนื่องจากสามารถจับความแตกต่างของช่วงเวลาย่อยได้เนื่องจากคุณมีคำสั่งping
ที่ปกติจะใช้งานได้ภายในหนึ่งวินาที
ซ้อนสคริปต์ของคุณ ในการส่งอีเมลมีตัวเลือกมากมาย ฉันชอบ 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
$SECONDS
; เยี่ยมมาก! หากต้องการเพิ่มสิ่งนี้คุณสามารถแปลงวินาทีเป็นชั่วโมง: นาที: วินาทีกับสิ่งที่ต้องการdate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'
(ดูman date
ตัวเลือกการจัดรูปแบบเพิ่มเติม)