Tuesday, May 25, 2010

การประยุกต์ใช้งาน คำสั่ง mail และ crontab และการเขียน Shell script เบื้องต้น

การประยุกต์ใช้งาน คำสั่ง mail และ crontab และการเขียน Shell script เบื้องต้น


โจทย์มีอยู่ว่า หากเราต้องการให้ระบบ ส่งเมล์บอกเราว่า เรามีเนื้อที่ในดิสก์เหลืออยู่เท่าไหร่ ทุก ๆ วัน เราจะเขียนสั่งงานอย่างไร

สิ่งที่เราจะต้องเริ่มทำเป็นอันดับแรก คือต้องรู้ว่า เราต้องทำอะไรบ้าง นั่นคือ

1. ต้องหาว่า เรามีเนื้อที่เหลือในดิสก์เท่าไหร่ หรือใช้ไปแล้วเท่าไหร่ คำสั่งที่ใช้คือ

df –h

2. แต่เนื่องจากว่า เราต้องการให้เก็บเป็นไฟล์ text เพื่อที่เราจะได้ใช้งานในขั้นตอนถัดไปจากนี้ เราจึงจำเป็นต้องใช้คำสั่งเพิ่มเติมจากปกติเป็นพิเศษ นั่นคือ

df –h > df.txt

3. เราต้องให้ระบบส่งเมล์ออกไปหาเรา คำสั่งที่ใช้ คือ

mail -s "Subject ใส่อะไรก็ได้" "E-mail ที่เราจะให้ส่งไปหา" < df.txt

ยกตัวอย่างเช่น

mail -s "Disk on server" "taveesak@gmail.com" < df.txt

4. เอาคำสั่งข้อสองและข้อสามมารวมกันให้ทำงานได้ในบรรทัดเดียว ก็จะเป็น

df -h > df.txt;mail -s "Disk on server" "taveesak@gmail.com" < df.txt

5. เพื่อความสะดวก ก็ให้เราเขียนเป็น Script ขึ้นมา เวลาใช้งานก็จะเรียกใช้งานได้สะดวกขึ้น โดยมีขั้นตอนดังนี้

a) Login เป็น root ก่อน
b) เพื่อความแน่นอนให้เราพิมพ์ cd เพื่อกลับไปยัง Home ของ root จะได้มั่นใจว่า ไฟล์ script ที่เราเขียนไปอยู่ที่นั่นแน่นอน
c) พิมพ์คำสั่ง vim showdisk.sh หรือจะใช้ชื่ออื่นก็ได้นะ เอาที่จำง่าย ๆ
d) กดปุ่ม i เพื่อให้เราสามารถเขียนคำสั่งลงไปได้ แล้วก็เขียนคำสั่งตามด้านล่างเลย

#!/bin/bash
df -h > df.txt;mail -s "Disk on server" "taveesak@gmail.com" < df.txt


e) จากนั้นกดปุ่ม ESC เพื่อออกจากโหมดแก้ไข และพิมพ์ว่า :wq เพื่อบันทึกและออกจากโปรแกรม
f) ลองสั่ง ls –l จะพบว่ามีไฟล์ showdisk.sh
g) โดยปกติแล้ว script ที่เราเขียนจะยังไม่สามารถ run ได้ จนกว่าเราจะตั้ง mode ให้สามารถ run ซึ่งวิธีการตั้งให้เราพิมพ์คำสั่งดังนี้

Chmod 700 showdisk.sh

h) เพียงเท่านี้ เราก็มี script file ที่สามารถใช้งานได้แล้ว ซึ่งเราสามารถทดสอบการทำงานโดยการเรียก script ขึ้นมาใช้งาน ด้วยการพิมพ์คำสั่งว่า ./showdisk.sh

6. จากโจทย์ บอกว่า เราต้องส่งเมล์บอกทุก ๆ วัน เราก็ต้องตั้งเวลาในการรันscript โดยใช้ crontab ซึ่งมีวิธีการทำดังนี้

a) Login เป็น root ก่อน
b) พิมพ์คำสั่ง vi /etc/crontab
c) กดปุ่ม i เพื่อให้เราสามารถเขียนคำสั่งลงไปได้ แล้วก็เขียนคำสั่งตามด้านล่างเลย

59 23 * * * root /root/showdisk.sh

d) จากบรรทัดด้านบน script นี้ จะถูกรันทุก ๆ วัน เวลา 23:59 น. หรือก่อนเที่ยงคืนซัก 1 นาทีนั่นเอง
e) จากนั้นกดปุ่ม ESC เพื่อออกจากโหมดแก้ไข และพิมพ์ว่า :wq เพื่อบันทึกและออกจากโปรแกรม

7. เท่านี้ก็เสร็จเรียบร้อย ที่เหลือก็แค่รอเมล์ที่จะเข้ามาตามเวลาที่เราระบุไว้ใน crontab