Lập Lịch Tasks Trên Linux Sử Dụng Crontab
Nếu bạn đang có một website mà nó "nặng nề" trên webserver, bạn có lẽ muốn chạy một vài tiến trình ví dụ như tạo ra những hình nhỏ hoặc thu thập dữ liệu ngầm. Theo cách này, nó không thể hiển thị với một giao diện người dùng. Linux có một chương trình tuyệt vời dành cho việc này. Nó cho phép các ...
Nếu bạn đang có một website mà nó "nặng nề" trên webserver, bạn có lẽ muốn chạy một vài tiến trình ví dụ như tạo ra những hình nhỏ hoặc thu thập dữ liệu ngầm. Theo cách này, nó không thể hiển thị với một giao diện người dùng. Linux có một chương trình tuyệt vời dành cho việc này. Nó cho phép các tác vụ chạy một cách ngầm tự động bên dưới đều đặn trong một khoảng thời gian. Bạn cũng có thể sử dụng nó để tự động sao lưu, đồng bộ files, lập lịch cập nhật và nhiều hơn thế nữa. Chào mừng đến với thế giới của crontab.
Crontab (cron xuất phát từ "chronos", theo tiếng Hy Lạp có nghĩ là thời gian, tab là viết tắt của table), được tạo ra trên Unix và hoặc những hệ điều hành nhân Unix, thường dùng để lập lịch cho các câu lệnh để thực thi định kỳ. Để xem được những crontab nào đang chạy trên hệ thống của bạn, bạn có thể mở terminal và chạy:
sudo crontab -l
Để chỉnh sửa danh sách các crontab này, bạn có thể chạy:
sudo crontab -e
Nó sẽ mở trình soạn thảo mặc định (có thể là vi hoặc pico, có thể thay đổi trình soạn thảo mặc định nếu bạn muốn) để chúng ta thao tác với crontab. Nếu bạn lưu lại và thoát trình soạn thảo, tất cả cronjobs được lưu lại trong crontab. Cronjobs được viết theo định dạng sau:
* * * * * /bin/execute/this/script.sh
Như bạn đã nhìn thấy, có 5 dấu sao. Những dấu sao này thể hiện những thành phần khác nhau của ngày theo thứ tự sau:
- minute - phút (0 - 59)
- hour - giờ (0 - 23)
- day or month - ngày trong tháng (0 - 31)
- month - tháng (1 - 12)
- day of week (0 - 6 ~ Sunday - Saturday)
Thực thi mỗi phút
Nếu bạn để toàn dấu sao, nó có nghĩa là "mỗi". Nó có lẽ hơi khó hiểu một chút. Hãy sử dụng ví dụ trước đó:
* * * * * /bin/execute/this/script.sh
Nó chứ toàn dấu sao nên nó sẽ thực thi
- Mỗi phút
- Trong mỗi giờ
- Trong mỗi ngày
- Trong mỗi tháng
- Và mỗi ngày trong tuần
Nói ngắn gọn, kịch bản này được thực thi mỗi phút một lần, không có ngoại lệ.
Thực thi vào 1AM mỗi Thứ Sáu
Vậy nếu chúng muốn lập lịch cho kịch bản chạy vào 1 giờ sáng mỗi Thứ Sáu, chúng ta cần lệnh sau:
0 1 * * 5 /bin/execute/this/script.sh
Kịch bản này sẽ được thực thi khi giờ hệ thống:
- minute - phút: 0
- of hour - của giờ: 1
- of day of month - Của ngày trong tháng: (every day of month)
- of month - Của tháng: * (every month)
- and weekdays - Và ngày trong tuần: 5 (=Friday)
Thực thi vào 1AM từ Thứ Hai đến Thứ Sáu
Nếu chúng ta muốn lập lịch chạy từ vào 1 giờ sáng từ Thứ Hai đến Thứ Sáu, chúng ta cần lệnh sau:
0 1 * * 1-5 /bin/execute/this/script.sh
Kịch bản này sẽ được thực thi khi giờ hệ thống:
- minute - phút: 0
- of hour - của giờ: 1
- of day of month - Của ngày trong tháng: (every day of month)
- of month - Của tháng: * (every month)
- and weekdays - Và ngày trong tuần: 1-5 (=Monday-Friday)
Lập lịch một cách ngắn gọn
Điều gì xảy ra nếu bạn muốn chạy thứ gì đó cứ 10 phút một lần? Chúng ta có thể làm như sau:
0,10,20,30,40,50 * * * * /bin/execute/this/script.sh
Nhưng crontabs cho phép bạn thiết lập tốt hơn:
*/10 * * * * /bin/execute/this/script.sh
Nó làm điều tương tự như câu lệnh ở trên. Bạn có thể làm toán chứ?