Lập lịch script với Cron

Nhập môn Bash Scripting

Alex Scriven

Data Scientist

Vì sao cần lập lịch script?

 

Có nhiều tình huống cần lập lịch script:

  1. Tác vụ định kỳ cần thực hiện: hàng ngày, hàng tuần, nhiều lần mỗi ngày.
    • Bạn có thể tự đặt lịch trên lịch, nhưng nếu quên thì sao!?
  2. Tối ưu tài nguyên (chạy script vào rạng sáng)

Lập lịch bằng cron là kiến thức thiết yếu trong hạ tầng dữ liệu hiện đại.

Nhập môn Bash Scripting

Cron là gì?

 

Cron đã có trên hệ thống kiểu Unix từ thập niên 70. Con người “lười” từ khi đó!

Tên gọi đến từ tiếng Hy Lạp về thời gian, chronos.

Cron chạy bằng crontab, là tệp chứa các cronjobs, mỗi cái cho crontab biết chạy gì và khi nào.

Nhập môn Bash Scripting

Crontab - bộ điều khiển cronjob

 

Bạn có thể xem các lịch (cronjobs) hiện có bằng lệnh:

crontab -l
crontab: no crontab for user

Có vẻ ta cần tạo một lịch (cronjob)!

Nhập môn Bash Scripting

Cấu trúc crontab và cronjob

Hình từ Wikipedia này minh họa cách tạo cronjob trong tệp crontab. Bạn có thể có nhiều cronjobs, mỗi dòng một cái.

Cấu trúc của crontab

  • Có 5 dấu sao, mỗi cái cho một đơn vị thời gian
  • Mặc định, * nghĩa là “mỗi”
Nhập môn Bash Scripting

Ví dụ cronjob

Cùng xem vài ví dụ cronjob:

5 1 * * * bash myscript.sh

  • Sao phút là 5 (sau giờ 5 phút). Sao giờ là 1 (sau 1 giờ sáng). Ba cái cuối là *, tức mỗi ngày, mỗi tháng
    • Tổng quan: chạy mỗi ngày lúc 1:05 sáng.

 

15 14 * * 7 bash myscript.sh

  • Sao phút là 15 (sau giờ 15 phút). Sao giờ là 14 (sau 2 giờ chiều). Hai cái tiếp là * (Mỗi ngày trong tháng, mỗi tháng). Sao cuối là ngày 7 (Chủ nhật).
    • Tổng quan: chạy lúc 2:15 chiều mỗi Chủ nhật.
Nhập môn Bash Scripting

Cấu trúc cronjob nâng cao

Nếu muốn chạy nhiều lần mỗi ngày hoặc theo các bước thời gian “X”, bạn cũng có thể làm được:

  • Dùng dấu phẩy cho các mốc cụ thể. Ví dụ:
    • 15,30,45 * * * * sẽ chạy vào phút 15, 30, 45 của các giờ do dấu sao thứ hai chỉ định. Ở đây là mỗi giờ, mỗi ngày, v.v.
  • Dùng dấu gạch chéo cho “mỗi X đơn vị”. Ví dụ:
    • */15 * * * * chạy mỗi 15 phút. Cũng áp dụng cho mỗi giờ, ngày, v.v.
Nhập môn Bash Scripting

Cronjob đầu tiên của bạn

Hãy lập lịch script extract_data.sh chạy mỗi sáng lúc 1:30. Các bước:

  1. Trong terminal gõ crontab -e để sửa danh sách cronjob.
    • Có thể hỏi chọn trình soạn thảo. nano dễ dùng và ít đường cong học hơn vi (vim).
  2. Tạo cronjob:
    • 30 1 * * * extract_data.sh
Nhập môn Bash Scripting

Cron job đầu tiên của bạn

3. Thoát trình soạn thảo để lưu

Nếu dùng nano (trên Mac), nhấn ctrl + o, rồi enter, rồi ctrl + x để thoát.

Bạn sẽ thấy thông báo crontab: installing new crontab

4. Kiểm tra bằng lệnh crontab -l.

30 1 * * * extract_data.sh

Làm tốt lắm!

Nhập môn Bash Scripting

Ayo berlatih!

Nhập môn Bash Scripting

Preparing Video For Download...