Crontab นาฬิกาปลุกส่วนตัวสำหรับ Unix & Linux
หัวข้อ บทความ แทก How to | Linux | Perl | PHP
เมื่อวานโม้ จะอมไว้ คิดๆ ดูรีบเขียนรีบปล่อยให้อ่านดีกว่า -___- เดี๋ยว
งานเข้ามาอีกเดือนหน้าไม่ได้มา Update อีก โดนสมาชิกด่าแน่ๆ ฮาา แบบเกรงใจน่ะฮับ ^^
Crontab มันคืออะไร ??
ท่านที่เคยอ่านหนังสือ cgi เล่ม 2 ที่พี่ทรงเกียรติ เขียนไว้คงพอผ่านตากันมาบ้างแหะๆ ผมขอเล่าใหม่
ละกันครับ Crontab เป็นคำสั่งๆ นึงใน Unix หรือ Linuxที่มีหน้าที่ เสมือนเป็น นาฬิกาปลุก
โดยเราสามารถ กำหนดการทำงานของคำสั่งนี้ ให้ทำงานแทนเรา โดยที่เราไม่ต้อง Online อยู่ใน Server เลย
มีประโยชน์ในการทำงาน แบบ ระบบ Auto ต่างๆ เช่น Admin จะใช้เพื่อจัดเก็บหรือ สร้าง Log file รายวัน
โดยส่วนมาก จะตั้งไว้ที่ช่วงคน ไม่ค่อยได้เข้า web อาจจะประมาณเที่ยงคืน ถึง หกโมงเช้า
การที่จะเล่นคำสั่งนี้ได้ นะคับ ต้องอาศัย Power นิดหน่อย (ว่ากันไปนั้นเลย)
1. ต้องมี user pass ที่สามารถ Telnet หรือ SSH เข้าไปที่ Server ที่เราใช้งานได้
2. User ดังกล่าวจะต้องได้รับ สิทธิในการใช้งานคำสั่งดังกล่าวด้วย คือปกติ Admin จะไม่ค่อยเปิดให้
ใช้คำสั่งนี้ เหตุผลเพราะอะไรเดี๋ยวท้ายๆ เล่าให้ฟัง
3. ก็ต้องมี Script ที่ต้องการให้ทำงานอัตโนมัติ ด้วยสิ -____-
ในที่นี้ ผมก็ขอยกตัวอย่างจาก Scriptdd เนี่ยแหละครับแหะๆ Hosting CGITOP มีให้เล่นหมด
(คุยซะขายของหน่อยอิอิ) Script ที่ต้องการให้ตั้ง Crontab ก็คือ Script update ข่าวไทยรัฐ ชื่อว่า thairath.pl
Login SSH เข้ามาแล้วครับ เริ่มกันเลยดีกว่า
ด้วย Help ที่รักทำให้ผมมีวันนี้ ^^
นั้นสิ จะทำอะไรได้ไม่ได้ อาศัย Help ของ Program ไว้ก่อน อันดับแรก พิมพ์ ว่า Crontab ไปเลย

เอาน่ะ ได้อะไรมาอีกนิดหน่อย มีรูปแบบการใช้ โผล่มาให้ละและมี option -e , -l , -r
ยังงงไม่พอ เอ้าใช้คำสั่ง man crontab อีกซักตัวอ่านกันเข้าไปเลยครับ ^^
อ่านแล้วไม่เข้าใจมาดูวิธีผมละกัน
อันดับแรก ก็สร้าง file เป็น text file ก็ได้ครับ ขึ้นมา 1 file โดย file นี้ประกอบด้วย
ข้อมูล config การตั้งเวลาต่างๆ โดยมีรูปแบบดังนี้
นาที ชม วัน เดือน ปี fileที่ต้องการรัน (path เต็ม)
เช่น ผมต้องการให้ Script thairath.pl ผมรันทุกๆ ชม ตามที่กำหนด ผมก็กำหนดดังนี้
0 0,3,6,9,12,15,18,21 * * * /home/aum/cgi-bin/thairath.pl
แค่นี้เองครับ แบบนี้คือการกำหนด ว่า ทุกๆ เวลา
เที่ยงคืน
ตีสาม
หกโมงเช้า
เก้าโมงเช้า
เที่ยง
บ่ายสาม
หกโมงเย็น
สามทุ่ม
Script thairath.pl จะถูกปลุกขึ้นมาให้ทำงาน
อันดับต่อไปก็คือทำการนำ file ดังกล่าวมาใส่ใน contab เราซะ ด้วยคำสั่งว่า crontab ccc.txt
เสร็จแล้วดูว่าได้ไม่ได้
ก็แค่นี้แหละครับ ลองดูได้ด้วยคำสั่ง crontab -l ถ้าเรียบร้อยดีก็จะแสดงผลอย่างเป็น list ที่เรานำ ไปเข้า crontab ไว้

ก่อนจะนำ crontab เข้าไปใส่ครับจะเห็นว่าไม่มี crontab อยู่
ใส่ crontab เข้าไปแล้ว
เมื่อ crontab -l ดูจะเห็นว่ามีรายการเข้ามาแล้ว
ข้อควรจำระวังไว้ก่อน
ปัญหาส่วนใหญ่เกิดจาก Script ที่เขียนทั้งหมดจะต้องกำหนดเป็น path เต็มนะครับเพราะไม่งั้นมันจะอ้างอิง path จากการ crontab ที่รัน script
เช่น ในส่วนการเขียน file ต่างๆ ดังตัวอย่าง
open(AuM, ">/home/aum/handstorydd/thairath/$i.html") || die print qq("Error can not open file $file");
print AuM "$viewpage\n";
close(AuM);
หากรูปแบบของ file ที่นำเข้ามานั้นมีปัญหาจะเกิดผลแบบนี้ครับ
ฉะนั้นไม่ต้องกลัวว่าถ้าเขียนผิดมันจะไม่รัน
บางครั้งการ turn ค่าคืนของ บาง Server อาจจะส่งกลับมาเป็น mail (ดังที่พี่ทรงเกียรติเขียนไว้ใน หนังสือ)
ฉะนั้น ในชุดคำสั่งที่กำหนดไว้ควรกำหนด file ที่จะรองรับข้อมูลดังกล่าวด้วยเผื่อ mail box เต็ม เช่น 0 0,3,6,9,12,15,18,21 * * * /home/aum/cgi-bin/thairath.pl > thairathlog.dat
การกำหนดแบบนี้จะช่วยให้ เมื่อ รัน script แล้วไม่ว่าจะมีค่าอะไรส่งกลับมา (แนะนำให้ส่งค่าออกมา
ด้วยเช่น Log file ต่างๆ เวลาที่ทำงาน เพื่อที่จะใช้ตรวจสอบการทำงานได้ต่อไป ) ค่าจะถูกนำไป
เก็บไว้ที่ thairathlog.dat
crontab ไม่ควรมีการใช้งานมากเกินไปไม่อย่างนั้น ระเบิดเวลาดีๆนี่เองครับ เหตุที่ Admin ไม่ได้ ปล่อยให้ user ธรรมดาใช้งานได้นั้น
ก็ลองคิดดูครับ ถ้าสถาบันการศึกษา มี นักศึกษา สามสี่พันคน เกิด นักเรียนทุกคน สร้าง crontab คนละ ห้าตัว อิอิ สี่พันคนละ โอ้ Server
มันจะทำงานทันได้ยังไงคิดดู ฮา ฮา ฮา
ในระดับ Hosting ถ้า admin ปล่อยให้ใช้ก็อย่าไปถล่มเค้านะครับ ตั้งไว้ใช้พอประมาณ
และตามมารยาทก็แจ้ง Admin ด้วยว่าเรามี Script อะไรรันบ้าง
แล้ว Windows ไม่มี crontab จะทำอย่างไร
เคอะๆ ปัญหาโลกแตก โธ่ๆ -____- น่าสงสารเนอะ ก็ช่างหัวมันสิ ..... อ้าวพี่อ้ำ ไหงปากงี้แหละ ฮาา
ก็ไม่ยากนิครับ ก็ใช้ Scheduled Tasks สิวุ้ยโธ่ ยากอะไร

เอาละ สำหรับตัวนี้ไปลองหัดเล่นกันดูเองละกันครับ สำหรับท่านที่ใช้ Server Windows อ้อ พวกเช่า host Windows ผมก็ไม่รู้เหมือน
มันมีอะไรให้ Config หรือเป่า อิอิ ถ้ามี Server เองก็ ok ละครับวิธีนี้
จบละครับ บทความนี้ ลวกเหมือนเดิมด้วยความเคยชิน อิอิ
Read (4,489)
Comments (6)
2002-12-25 15:03:49
ความคิดเห็น
ยอดเยี่ยมครับ มีประโยชน์...
โดยคุณ เหอๆ
2008-05-20 13:34:47
ช่วยได้เยอะมากเลย ขอบคุณมากคะ
โดยคุณ หมูหวาน
2008-08-05 10:34:11
ถ้าผมต้องการเซต ให้รันทุกวันจันทร์แรกของทุกเดือนตอนแปดโมง สามารถเซตอย่างนี้ได้ป่าวครับ
00 08 1,2,3,4,5,6,7 * 1 rm /tmp/*
โดยคุณ xcite
2008-08-15 10:27:49
รบกวนแนะนำด้วยค่ะ
ดิฉันทำตามที่คุณสอน คือ สร้างไฟล์ run_crontab.txt กำหนด config ดังนี้
* * * * * /mypath/start.sh >> ./output.txt (ทุก 1 นาที)
แล้วก็รัน command คือ crontab run_crontab.txt
ปรากฎว่า ไม่มีผลลัพธ์ และ เช็คผลด้วย crontab -l แล้วโชว์แค่ ค่า config รวมทั้ง ในไฟล์ output.txt ก็ไม่มีผลลัพธ์ค่ะ
ขอบคุณค่ะ
โดยคุณ new
2008-09-10 10:57:05
ขอแก้ไขค่ะ
ผลการรัน commamd ค่ะ
[root@nrr02 bin]# crontab run_crontab.txt
"run_crontab.txt":1: premature EOF
errors in crontab file, can't install.
โดยคุณ new
2008-09-10 11:32:57
* * * * * /mypath/start.sh >> ./output.txt (ทุก 1 นาที)
ลองเปลี่ยนเป็นแบบนี้นะครับ
*/1 * * * * /mypath/start.sh >> ./output.txt (ทุก 1 นาที)
โดยคุณ x
2008-09-22 11:46:29