Scriptdd.com

บทความบ้าบ่นของคนทำเว็บ ปี 8

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 (27,186) Comments (9) 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 โดยคุณ 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 โดยคุณ new 2008-09-10 10:57:05

ขอแก้ไขค่ะ
ผลการรัน commamd ค่ะ
[[email protected] bin]# crontab run_crontab.txt
"run_crontab.txt":1: premature EOF
errors in crontab file, can't install.

รูปคุณ new โดยคุณ new 2008-09-10 11:32:57

* * * * * /mypath/start.sh >> ./output.txt (ทุก 1 นาที)
ลองเปลี่ยนเป็นแบบนี้นะครับ
*/1 * * * * /mypath/start.sh >> ./output.txt (ทุก 1 นาที)

รูปคุณ x โดยคุณ x 2008-09-22 11:46:29

ช่วยอธิบายScheduled Tasks หน่อยครับ อยากจะตั้งเวลา8.00 และ 18.00ให้ร้องเพลงชาติครับ ไว้จัดสถานีวิทยุเคยทำดูแล้วมันฟ้องerrer

รูปคุณ อ่อน โดยคุณ อ่อน 2010-03-31 16:43:44

คำถามของท่าน xcite ผมว่าน่าจะทำไม่ได้นะ


"ถ้าผมต้องการเซต ให้รันทุกวันจันทร์แรกของทุกเดือนตอนแปดโมง สามารถเซตอย่างนี้ได้ป่าวครับ"

แต่ถ้าเปลี่ยนเป็น "รันทุกวันจันทร์ของทุกเดือนตอนแปดโมง"
น่าจะได้ดังนี้
00 08 * * 1 rm /tmp/*

รูปคุณ xxxx โดยคุณ xxxx 2010-04-02 22:56:13

ผิดแล้วครับ
* ตัวสุดท้ายคือ แต่ละวันในสัปดาห์ ครับ ไม่ใช่ ปี
มีค่าตั้งแต่ 0-6 คือ (อาทิตย์ = 0, จันทร์ = 1, อังคาร = 2, พุธ = 3, พฤหัส = 4, ศุกร์ = 5 และ เสาร์ = 6)

รูปคุณ ปุก โดยคุณ ปุก 2010-05-25 17:19:19

ร่วมแสดงความคิดเห็น



ขอความกรุณา ปัญญาชน ทุกๆท่าน รณรงค์การใช้ภาษาไทยให้ถูกต้อง
กรุณา ลงความคิดเห็นโดยใช้ภาษาไทยให้เป็นภาษาไทย งดการใช้ภาษาวัยรุ่น,
แอ๊บแบ๊ว บอกตรงๆปัญญาอ่อน !! Admin นั่งอ่านแล้วปวดหัว

เข้าระบบ


จำไว้ด้วยนะจ้ะ

สมัครสมาชิก
ลืมรหัสผ่าน

บทความล่าสุด

Gallery

Tags

Notebook Testdrive Travel HTML MySQL Live SEO Shopping Google ROM JavaScript Plugin XHTML Honda Motorcycle Diary เฟรมเสือหมอบ Security Freeware จักรยาน Payment Gateway PHP bicycle Developer barcampbangkok2 Food API Internet Explorer About me

อื่นๆ ...

เพื่อนบ้าน

สถิติส่วนตัว

คลิกรับ Feed สิจ๊ะ

TwitterCounter for @9aum

Scriptdd.com | ctdd Version 3.0 ติดต่อฐานข้อมูลทิ้งสิ้น 6 ครั้งใช้เวลาประมวลผล 0.0253 วินาที
โปรแกรมโดย 9AuM | ออกแบบโดย styleshout