ในบางครั้งที่เราใช้งานอุปกรณ์เครือข่าย เมื่อเกิดมีปัญหาขึ้นมา สิ่งที่หลาย ๆ คนเลือกที่จะทำ(รวมทั้งผมด้วย) ก็คือการทดลอง reload อุปกรณ์นั้น ๆ ดูก่อน เพื่อเป็นการล้างค่าต่าง ๆ บนตัวอุปกรณ์ ซึ่งก็เป็นวิธีการในการแก้ไขปัญหาเฉพาะหน้าที่ดีวิธีนึงใช่มั้ยครับ
ยกตัวอย่างเช่น ในไซต์ลูกค้าของผมไซต์นึง ทางลูกค้าพบปัญหาคือ อุปกรณ์ในรุ่นที่ลูกค้าใช้งานอยู่นั้นเป็นรุ่นเล็กจนไม่เพียงพอต่อการใช้งานขององค์กร ซึ่งเมื่อเปิดใช้งานไว้หลาย ๆ วัน จะทำให้มีการใช้ memory ในปริมาณที่สูงมาก จนทำให้การใช้งานของผู้ใช้ช้าลงจนเห็นได้ชัด และด้วยเหตุผลบางประการ ทางลูกค้าก็ไม่สามารถที่จะ upgrade ไปใช้งานอุปกรณ์ในรุ่นอื่นได้ จึงต้องทำการแก้ไขปัญหาเฉพาะหน้าด้วยการ reload เราเตอร์ทุก ๆ วันในช่วงที่ไม่มีการใช้งานโดยการใช้คำสั่ง "reload at 00.00" เพื่อให้เราเตอร์ทำการ reload ตัวเองในเวลาเที่ยงคืน ซึ่งก็ต้องมาทำการตั้งคำสั่งนี้ด้วยตัวเองทุก ๆ วัน ทางลูกค้าจึงได้มาปรึกษาผมว่า มีวิธีใดบ้างที่จะทำให้เราเตอร์ reload ตัวเองโดยอัตโนมัติ โดยไม่ต้องตั้งค่าทุก ๆ วันบ้าง ซึ่งทางผมก็ได้ไปค้นหาวิธีการมาจนได้ ในวันนี้จึงอยากที่จะมาแนะนำเพื่อน ๆ เผื่อได้นำไปใช้งานกันครับ
สำหรับวิธีการที่จะแนะนำในวันนี้ก็คือการใช้ Embedded Event Manager (EEM) ร่วมกับการใช้ cron ซึ่งสำหรับเพื่อน ๆ ที่เคยใช้งาน unix หรือ linux มาก็คงเคยผ่านตาการใช้ cron กันมาบ้างใช่มั้ยครับ แต่สำหรับเพื่อน ๆ ที่ไม่เคยรู้จักการใช้งาน cron ในวันนี้ผมก็จะมาแนะนำวิธีการใช้งาน cron สั้น ๆ กันก่อนนะครับ
cron เป็นการสั่งให้ทำการใช้คำสั่ง หรือใช้ script ต่าง ๆ ตามช่วงเวลาที่กำหนดไว้ ในการใช้งาน cron จะต้องมีการกำหนดเวลาเอาไว้ โดยมีรูปแบบเป็น 6 fields ดังนี้
# .------------- minute (0 - 59)
# | .---------- hour (0 - 23)
# | | .-------- day of month (1 - 31)
# | | | .------ month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
*ในส่วนนี้ขอขอบคุณ wikipedia นะครับ เนื่องจากเห็นว่าอธิบายไว้ได้ง่ายและชัดเจนดีครับ
ตัวอย่างการใช้ cron
ใช้คำสั่งบางอย่างในทุก ๆ เดือน ก็จะต้องทำการตั้งค่า cron ดังนี้
0 0 1 * *
ใช้คำสั่งบางอย่างในทุก ๆ วันจันทร์ถึงวันพุธทุก ๆ 6 โมงเช้า ก็จะต้องทำการตั้งค่า cron ดังนี้
0 6 * * 1-3
ทั้งนี้ในการใช้งาน cron ได้มีการกำหนดค่าต่าง ๆ ที่มีการใช้งานเป็นประจำเอาไว้เป็นคำสั่ง เพื่อให้สะดวกต่อการนำไปใช้ เช่น เราต้องการให้ใช้คำสั่งบางอย่างในทุก ๆ ชั่วโมง แทนที่จะต้องใช้คำสั่งว่า “0 * * * *” ก็สามารถใช้คำสั่งว่า @hourly แทนได้ โดยคำสั่งที่มีการกำหนดไว้มีดังนี้
คำสั่ง | อธิบาย | มีค่าเท่ากับ |
@yearly (หรือ @annually) | ทำทุกปี | 0 0 1 1 * |
@monthly | ทำทุกเดือน | 0 0 1 * * |
@weekly | ทำทุกสัปดาห์ | 0 0 * * 0 |
@daily (หรือ @midnight) | ทำทุกวัน | 0 0 * * * |
@hourly | ทำทุกชั่วโมง | 0 * * * * |
@reboot | ทำเมื่อเริ่ม boot ใหม่ |
เอาล่ะครับ เมื่อเพื่อน ๆ ทำความรู้จักกับการใช้งาน cron กันแล้ว เราก็จะมาเริ่มทำการตั้งค่า EEM และ cron เพื่อกำหนดเวลาให้ทำการ reload กันครับ สำหรับขั้นตอนในการตั้งค่าก็มีดังนี้
- ทำการตั้งค่าวันและเวลาให้ตรงกับเวลาในปัจจุบัน
- เข้าสู่โหมด appler configuration mode ด้วยการใช้คำสั่ง "event manager applet <applet-name>"
- ทำการกำหนดเวลาโดยใช้ cron ด้วยคำสั่ง "event timer cron name <name> cron-entry <cron-entry>"
- ทำการกำหนด action ว่าให้ทำการ reload เมื่อถึงเวลาที่กำหนด
ในอันดับแรกเราก็ควรที่จะทำการตั้งวันและเวลาของอุปกรณ์เราให้ตรงกับปัจจุบันกันก่อนนะครับ แนะนำว่าควรที่จะทำการเทียบเวลากับ ntp server นะครับ
ตัวอย่าง
Router(config)#ntp server 203.185.69.59 prefer
Router(config)#ntp server 203.185.69.60
Router(config)#clock timezone ICT +7
Router(config)#do show clock
10:11:47.662 ICT Sun Nov 21 2010
จากนั้นขั้นตอนต่อมา เราก็จะมาเริ่มทำการตั้งค่า EEM กันครับ โดยจากตัวอย่างนี้จะกำหนดให้ทำการ reload ในทุก ๆ นาทีที่ 0 และชั่วโมงที่ 0 ของทุก ๆ วัน หรือก็คือในทุก ๆ เที่ยงคืนนั่นเองครับ ซึ่งการใช้คำสั่ง "0 0 * * *" นั้นสามารถใช้คำสั่งว่า "@midnight" แทนก็ได้ครับ
ตัวอย่าง
Router(config)#event manager applet reload@midnight
Router(config-applet)#event timer cron name midnight cron-entry "0 0 * * *"
Router(config-applet)#action 1.0 reload
Router(config-applet)#exit
เพียงเท่านี้อุปกรณ์ของเราก็จะทำการ reload ตัวเองโดยอัตโนมัติในทุก ๆ เที่ยงคืนแล้วครับ ซึ่ง EEM นี้ยังสามารถนำไปใช้งานได้อีกหลากหลายรูปแบบ เอาไว้คราวหน้าจะมาแนะนำวิธีการอื่น ๆ ให้เพื่อน ๆ กันนะครับ
No comments:
Post a Comment