การกำหนดเวลาสคริปต์ด้วย Cron

Bash Scripting เบื้องต้น

Alex Scriven

Data Scientist

ทำไมต้องกำหนดเวลาสคริปต์?

 

มีหลายสถานการณ์ที่การกำหนดเวลาสคริปต์เป็นประโยชน์:

  1. งานประจำที่ต้องทำซ้ำ เช่น ทุกวัน ทุกสัปดาห์ หรือหลายครั้งต่อวัน
    • ตั้งการแจ้งเตือนในปฏิทินได้ แต่ถ้าลืมล่ะ!?
  2. ใช้ทรัพยากรอย่างมีประสิทธิภาพ (รันสคริปต์ในช่วงดึก)

การกำหนดเวลาสคริปต์ด้วย cron เป็นทักษะสำคัญสำหรับการทำงานกับโครงสร้างข้อมูลสมัยใหม่

Bash Scripting เบื้องต้น

cron คืออะไร?

 

Cron เป็นส่วนหนึ่งของระบบ Unix-like มาตั้งแต่ยุค 70 มนุษย์ขี้เกียจมานานขนาดนั้น!

ชื่อนี้มาจากคำภาษากรีกที่แปลว่าเวลา คือ chronos

การทำงานขับเคลื่อนด้วยสิ่งที่เรียกว่า crontab ซึ่งเป็นไฟล์ที่มี cronjobs แต่ละรายการกำหนดว่าจะรันโค้ดใดและเมื่อใด

Bash Scripting เบื้องต้น

Crontab — ตัวขับเคลื่อน cronjobs

 

ดูกำหนดเวลา (cronjobs) ที่ตั้งค่าอยู่ในขณะนี้ได้ด้วยคำสั่งต่อไปนี้:

crontab -l
crontab: no crontab for user

ดูเหมือนจะต้องสร้างกำหนดเวลา (cronjob) ก่อน!

Bash Scripting เบื้องต้น

โครงสร้างของ crontab และ cronjob

ภาพจาก Wikipedia นี้แสดงโครงสร้างของ cronjob ภายในไฟล์ crontab สามารถมี cronjobs ได้หลายรายการ โดยเขียนหนึ่งรายการต่อหนึ่งบรรทัด

โครงสร้างของ crontab

  • มีดาว 5 ดวงให้ตั้งค่า แต่ละดวงแทนหน่วยเวลาหนึ่งหน่วย
  • ค่าเริ่มต้น * หมายถึง "ทุก"
Bash Scripting เบื้องต้น

ตัวอย่าง cronjob

มาดูตัวอย่าง cronjob กัน:

5 1 * * * bash myscript.sh

  • ดาวนาที คือ 5 (นาทีที่ 5 ของชั่วโมง) ดาวชั่วโมง คือ 1 (หลัง 1:00 น.) สามดาวที่เหลือเป็น * หมายถึงทุกวันและทุกเดือน
    • สรุป: รันทุกวันเวลา 1:05 น.

 

15 14 * * 7 bash myscript.sh

  • ดาวนาที คือ 15 (นาทีที่ 15) ดาวชั่วโมง คือ 14 (14:00 น.) สองดาวถัดไปเป็น * (ทุกวันในเดือน ทุกเดือน) ดาวสุดท้าย คือ วันที่ 7 (วันอาทิตย์)
    • สรุป: รันเวลา 14:15 น. ทุกวันอาทิตย์
Bash Scripting เบื้องต้น

โครงสร้าง cronjob ขั้นสูง

หากต้องการรันหลายครั้งต่อวันหรือทุก "X" ช่วงเวลา ก็ทำได้เช่นกัน:

  • ใช้เครื่องหมายจุลภาคสำหรับช่วงเวลาที่ระบุ เช่น:
    • 15,30,45 * * * * จะรันที่นาทีที่ 15, 30 และ 45 ของทุกชั่วโมงที่กำหนดโดยดาวที่สอง ในที่นี้คือทุกชั่วโมง ทุกวัน
  • ใช้เครื่องหมายทับสำหรับ "ทุก X ช่วง" เช่น:
    • */15 * * * * รันทุก 15 นาที รวมถึงทุกชั่วโมง ทุกวัน
Bash Scripting เบื้องต้น

cronjob แรกของคุณ

มากำหนดเวลาให้สคริปต์ extract_data.sh รันทุกเช้าเวลา 1:30 น. กัน โดยมีขั้นตอนดังนี้:

  1. พิมพ์ crontab -e ในเทอร์มินัลเพื่อแก้ไขรายการ cronjobs
    • อาจถูกถามว่าต้องการใช้โปรแกรมแก้ไขใด nano เป็นตัวเลือกที่ใช้งานง่ายและมีเส้นโค้งการเรียนรู้ที่ไม่ชันเท่า vi (vim)
  2. สร้าง cronjob:
    • 30 1 * * * extract_data.sh
Bash Scripting เบื้องต้น

cronjob แรกของคุณ

3. ออกจากโปรแกรมแก้ไขเพื่อบันทึก

หากใช้ nano (บน Mac) ให้กด ctrl + o แล้ว enter จากนั้น ctrl + x เพื่อออก

จะปรากฏข้อความ crontab: installing new crontab

4. ตรวจสอบว่ามีอยู่แล้วโดยรัน crontab -l

30 1 * * * extract_data.sh

ทำได้ดีมาก!

Bash Scripting เบื้องต้น

มาฝึกกันเถอะ!

Bash Scripting เบื้องต้น

Preparing Video For Download...