วิธีเรียกใช้หรือทำซ้ำคำสั่ง Linux ทุกๆ X วินาทีตลอดไป
ผู้ดูแลระบบมักจะต้องรันคำสั่งซ้ำๆ กันในช่วงระยะเวลาหนึ่ง บ่อยครั้งงานดังกล่าวสามารถเสร็จสิ้นได้อย่างง่ายดายด้วยคำสั่ง cron ง่ายๆ ในกรณีส่วนใหญ่ วิธีนี้น่าจะได้ผล แต่ระยะเวลาที่สั้นที่สุดที่คุณสามารถเรียกใช้คำสั่ง cron ได้คือทุกๆ 1 นาที เชื่อหรือไม่ว่าในหลายกรณีสิ่งนี้ช้าเกินไป
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้เทคนิคการเขียนสคริปต์ง่ายๆ ในการตรวจสอบหรือจับตาดูคำสั่งเฉพาะในสถานะการทำงานอย่างต่อเนื่องคล้ายกับคำสั่งบนสุด (ตรวจสอบกระบวนการและการใช้งานหน่วยความจำอย่างต่อเนื่อง) ทุกๆ 3 วินาทีตามค่าเริ่มต้น
เราจะไม่หยุดเพื่อหารือถึงสาเหตุว่าทำไมคุณจึงต้องรันคำสั่งบ่อยๆ ฉันเชื่อว่าทุกคนมีเหตุผลที่แตกต่างกันในการทำงานประจำวัน หรือแม้แต่ที่บ้านพีซีและแล็ปท็อป
1. ใช้คำสั่งนาฬิกา
Watch คือคำสั่ง Linux ที่ช่วยให้คุณสามารถรันคำสั่งหรือโปรแกรมเป็นระยะๆ และยังแสดงเอาต์พุตบนหน้าจออีกด้วย ซึ่งหมายความว่าคุณจะสามารถเห็นผลลัพธ์ของโปรแกรมได้ทันเวลา ตามค่าเริ่มต้น นาฬิกาจะรันคำสั่ง/โปรแกรมซ้ำทุกๆ 2 วินาที ช่วงเวลาสามารถเปลี่ยนแปลงได้อย่างง่ายดายเพื่อให้ตรงตามความต้องการของคุณ
ตรวจสอบการใช้หน่วยความจำ
“Watch” ใช้งานง่ายมาก ในการทดสอบ คุณสามารถเปิดเทอร์มินัล Linux ได้ทันทีและพิมพ์คำสั่งต่อไปนี้:
watch free -m
คำสั่งดังกล่าวจะตรวจสอบหน่วยความจำว่างของระบบและอัปเดตผลลัพธ์ของคำสั่งฟรีทุกๆ สองวินาที
ตามที่เห็นในผลลัพธ์ข้างต้น คุณมีส่วนหัวที่แสดงข้อมูลเกี่ยวกับช่วงเวลาการอัปเดต (จากซ้ายไปขวา) คำสั่งที่กำลังดำเนินการ และเวลาปัจจุบัน หากคุณต้องการซ่อนส่วนหัวนี้ คุณสามารถใช้ตัวเลือก -t
คำถามเชิงตรรกะถัดไปคือ จะเปลี่ยนช่วงเวลาการดำเนินการอย่างไร เพื่อจุดประสงค์ดังกล่าว คุณสามารถใช้ตัวเลือก -n
ที่ระบุช่วงเวลาที่จะดำเนินการคำสั่ง ช่วงเวลานี้ระบุเป็นวินาที สมมติว่าคุณต้องการเรียกใช้ไฟล์ script.sh
ทุกๆ 10 วินาที คุณสามารถทำได้ดังนี้:
watch -n 10 script.sh
หมายเหตุ หากคุณรันคำสั่งดังที่แสดงด้านบน คุณจะต้อง cd
ไปยังไดเร็กทอรี (เรียนรู้เรียนรู้ตัวอย่างคำสั่ง cd 15 ตัว) โดยที่ สคริปต์ตั้งอยู่หรือระบุเส้นทางแบบเต็มไปยังสคริปต์นั้น
ตัวเลือกที่มีประโยชน์อื่นๆ ของคำสั่ง watch ได้แก่:
-b
– สร้างเสียงบี๊บหากการออกคำสั่งไม่เป็นศูนย์-c
– ตีความลำดับสี ANSI-d
– เน้นการเปลี่ยนแปลงในเอาต์พุตคำสั่ง
ตรวจสอบผู้ใช้ที่เข้าสู่ระบบ เวลาทำงาน และค่าเฉลี่ยการโหลด
สมมติว่าคุณต้องการตรวจสอบผู้ใช้ที่เข้าสู่ระบบ เวลาทำงานของเซิร์ฟเวอร์ และโหลดเอาต์พุตเฉลี่ยในเฟสต่อเนื่องทุกๆ สองสามวินาที จากนั้นใช้คำสั่งต่อไปนี้ดังที่แสดง:
watch uptime
หากต้องการออกจากคำสั่ง ให้กด CTRL+C
ที่นี่ คำสั่ง 'uptime'
จะทำงานและแสดงผลลัพธ์ที่อัปเดตทุกๆ 2 วินาทีตามค่าเริ่มต้น
ติดตามความคืบหน้าของคำสั่งคัดลอก
ใน Linux ขณะคัดลอกไฟล์จากที่หนึ่งไปยังอีกที่หนึ่งโดยใช้คำสั่ง cp
ความคืบหน้าของข้อมูลจะไม่แสดง หากต้องการดูความคืบหน้าของข้อมูลที่ถูกคัดลอก คุณสามารถใช้ watch
คำสั่งพร้อมกับคำสั่ง du -s เพื่อตรวจสอบการใช้งานดิสก์แบบเรียลไทม์
cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso
หากคุณคิดว่ากระบวนการข้างต้นซับซ้อนเกินกว่าจะทำสำเร็จ ฉันขอแนะนำให้คุณใช้คำสั่ง Advance copy ซึ่งจะแสดงความคืบหน้าของข้อมูลขณะคัดลอก
2. ใช้คำสั่งสลีป
Sleep มักใช้เพื่อดีบักเชลล์สคริปต์ แต่ก็มีจุดประสงค์ที่เป็นประโยชน์อื่นๆ อีกมากมายเช่นกัน ตัวอย่างเช่น เมื่อรวมกับลูป for
หรือ While
คุณจะได้ผลลัพธ์ที่ยอดเยี่ยมทีเดียว
หากคุณยังใหม่กับการเขียนสคริปต์ทุบตี คุณสามารถดูคำแนะนำเกี่ยวกับ bash loops ของเราได้ที่นี่
ในกรณีที่นี่เป็นครั้งแรกที่คุณได้ยินเกี่ยวกับคำสั่ง "sleep"
คำสั่งนี้ใช้เพื่อหน่วงเวลาบางอย่างตามระยะเวลาที่กำหนด ในสคริปต์ คุณสามารถใช้มันเพื่อบอกให้สคริปต์ของคุณรันคำสั่ง 1 รอเป็นเวลา 10 วินาทีแล้วรันคำสั่ง 2
ด้วยการวนซ้ำข้างต้น คุณสามารถบอกให้ bash รันคำสั่ง พักการทำงานเป็นเวลา N วินาที จากนั้นจึงรันคำสั่งอีกครั้ง
ด้านล่างนี้คุณสามารถดูตัวอย่างของทั้งสองลูป:
สำหรับตัวอย่างลูป
for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
ซับหนึ่งด้านบนจะรันคำสั่ง echo และแสดงวันที่ปัจจุบัน รวม 10 ครั้ง โดยพัก 5 วินาทีระหว่างการประมวลผล
นี่คือผลลัพธ์ตัวอย่าง:
This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016
คุณสามารถเปลี่ยนคำสั่ง echo และ date ด้วยคำสั่งหรือสคริปต์ของคุณเอง และเปลี่ยนช่วงเวลาพักเครื่องตามความต้องการของคุณ
ในขณะที่ตัวอย่างวง
while true; do echo -n "This is a test of while loop";date ; sleep 5; done
นี่คือผลลัพธ์ตัวอย่าง:
This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016
คำสั่งข้างต้นจะทำงานจนกว่าผู้ใช้จะยุติการทำงานหรือขัดจังหวะ อาจมีประโยชน์หากคุณต้องการเรียกใช้คำสั่งที่ทำงานอยู่เบื้องหลังและคุณไม่ต้องการใช้ cron
ข้อสำคัญ: เมื่อใช้วิธีการข้างต้น ขอแนะนำเป็นอย่างยิ่งให้คุณตั้งค่าช่วงเวลาให้นานพอที่จะให้เวลาเพียงพอสำหรับคำสั่งของคุณในการรันให้เสร็จสิ้น ก่อนที่จะดำเนินการครั้งถัดไป
บทสรุป
ตัวอย่างในบทช่วยสอนนี้มีประโยชน์ แต่ไม่ได้หมายถึงการแทนที่ยูทิลิตี้ cron โดยสมบูรณ์ มันขึ้นอยู่กับคุณที่จะหาว่าอันไหนเหมาะกับคุณมากกว่า แต่ถ้าเราต้องแยกการใช้ทั้งสองเทคนิคออก ฉันจะพูดแบบนี้:
- ใช้ cron เมื่อคุณต้องการรันคำสั่งเป็นระยะๆ แม้ว่าระบบจะรีบูตแล้วก็ตาม
- ใช้วิธีที่อธิบายไว้ในบทช่วยสอนนี้สำหรับโปรแกรม/สคริปต์ที่ตั้งใจจะทำงานภายในเซสชันผู้ใช้ปัจจุบัน
เช่นเคยหากคุณมีคำถามหรือความคิดเห็นใด ๆ อย่าลังเลที่จะส่งในส่วนความคิดเห็นด้านล่าง