เคยไหมที่เราจะต้องทำ task แบบเดิมๆในช่วงเวลาเดิมๆของทุกวัน ในการพัฒนาระบบ web application
แทนที่เราจะมานั่งรันคำสั่งแบบเดิมๆทุกวัน Cron ได้ตอบโจทย์ของเรา
Cron คืออะไร
Cron มีไว้เพื่อ schedule tasks ที่เราต้องการเช่น กำหนด ณ เวลาเท่านี้ จะต้องทำ task นี้ มันก็จะไปทำ task ตาม script ที่เราเขียนเพื่อไปรัน server
หรือเรียกอีกอย่างว่าเป็น Job scheduler ซึ่งใช้สำหรับ Unix-like operating systems นั่นเอง
และแต่ละ task หรือ job จะถูกเรียกง่ายๆว่า Cron Jobs
ถ้ายังนึกภาพกันไม่ออก ยกตัวอย่างเช่น
- บริษัท A มีระบบ membership ซึ่งมีจำนวนสมาชิกเยอะมาก เมื่อถึงวันหมดอายุของสมาชิกลูกค้า ก็ไม่จำเป็นมานั่งกด deactivate หรือลบ account เอง
- บริษัท B อยากส่ง newsletter email ในรอบวัน หรือประจำเดือน เพื่อโปรโมตสินค้า
- บริษัท C มีระบบที่เช็คว่าใน website มีอะไรพังบ้าง จึงอยากให้มีระบบแจ้งเตือนเข้า email ทันที
Syntax
ตัวอย่างเช่น
20 * * * * /usr/bin/python /www/virtual/username/cron.py > /dev/null 2>&1
จะแบ่งเป็น 2 ส่วน
- ส่วนของ เวลา : ว่าจะรันเวลาเท่าไร
- ส่วนที่เหลือ คือ command ที่จะมา run ตรง command line
Timing syntax

จะเป็นส่วนที่บอกว่า Cron Jobs จะรันเมื่อไร เช่น
10 * * * * == ทุกวัน ทุกชม.เวลา 10 นาที คือ 00.10 น., 01: 10 น., …
*/10 * * * * == ครบทุก 10 นาที จะรัน เราเริ่มตั้งแต่เวลา 13.25 มันก็จะรันอีกรอบตอน 13.35 น.
45 3 * * * == รันตอน 03.45 ของทุกๆวัน ทุกเดือน โดยเวลาจะเริ่มจาก 0 เป็นเที่ยงคืน
0 6-10 * * * == รันทุกๆชม. ระหว่าง 6.00 ถึง 10.00
Command ก็จะแบ่งออกเป็น 3 ส่วน
- /usr/bin/python : คือ path ของ python ที่เราต้องการจะรัน
- /www/virtual/username/cron.py : ที่อยู่ของ script
- หลัง > ในส่วนนี้จะเป็นส่วนที่จะเก็บ output จากสิ่งที่เกิดขึ้น แต่ในตัวอย่างคือ /dev/null 2>&1 ซึ่งก็คือ blackhole ของระบบ เอาง่ายๆว่า เราไม่เก็บ output นั้นน่ะเอง
20 * * * * /usr/bin/python /www/virtual/username/cron.py > /var/log/cron.log
แบบ “>” จะเป็นการ rewrite โดยเก็บทับไฟล์ไปเลย
20 * * * * /usr/bin/python /www/virtual/username/cron.py >> /var/log/cron.log
แบบ “>>” จะเป็นการ append
Crontab command
schedule จะถูกเขียนใน configuration file ที่ชื่อ crontab
crontab -e
จะเปิด crontab file ให้เรา edit
crontab -l
list ตัว current cron jobs
crontab -r
remove crontab file
Working with Twilio
Twilio จะมี service หนึ่งที่ส่ง text messages เข้า mobile ผ่าน web service APIs
โดยเราจะเขียน cron เพื่อตั้งให้ส่ง SMS เข้ามือถือเราทุกๆ 5 นาที
เข้าไปสมัครและนำ account sid และ auth token กรอกลงตามนี้
send_sms.py
from twilio.rest import TwilioRestClient account_sid = "XXXXXXXXXXXXXXXX" # Your Account SID from www.twilio.com/console auth_token = "XXXXXXXXXXXXXXX" # Your Auth Token from www.twilio.com/console client = TwilioRestClient(account_sid, auth_token) message = client.messages.create( body="Hello from the othersideeee", to="+6690XXXXXXX", # Replace with your phone number from_="+1201-XXX-XXXX ") # Replace with your Twilio number print(message.sid)
เริ่มด้วย
$ crontab -e
เข้าไป และเขียนคำสั่ง
*/5 * * * * /usr/bin/python /home/ubuntu/send_sms.py
โดย path ของ python หาได้จาก
$ which python
จากนั้นออกมาหน้า command line และรัน cron
$ python /home/ubuntu/send_sms.py
ผลลัพท์ที่ได้ มันก็จะส่ง sms มาทันทีและจะส่งในอีก 5 นาทีถัดไป

เย้! ![]()
Leave a reply to [Cron] เขียน slackbot ส่ง notification เตือน standup meeting – mesodiar Cancel reply