TỰ ĐỘNG CÔNG VIỆC BẰNG CRON TRÊN LINUX
25/03/2022 801

Kỳ này, hãy cùng chuyên gia của CO-WELL Asia tìm hiểu về cách thức sử dụng Cron để tự động công việc trên Linux. Mời bạn đọc theo dõi!
1. Cron là gì?
Cron (crontab) là một chương trình dựa trên thời gian thực được tạo trên hệ điều hành nhân Linux hoặc các hệ điều hành Unix-like, thường được dùng để chạy các tác vụ ngầm theo một lịch trình cụ thể ví dụ như: sao lưu, đồng bộ file, chạy batch,… Một khi được khởi động, nó sẽ được chạy ngầm mãi mãi.
Tính hữu ích khi chạy cron:
- Bạn có thể cài đặt để cron thực thi việc quét xem những user trial nào đã bị expired và delete hoặc set inactive tài khoản của họ.
- Gửi email tới user sử dụng hệ thống theo thời gian biểu đã định.
- Xoá bỏ những file cache hàng tháng.
- Kiểm tra hàng ngày xem những link nào của website bị hỏng hay không để nhanh chóng khắc phục
- Backup cơ sở dữ liệu.
2. Cài đặt Cron
Trong bài viết này, chuyên gia của CO-WELL Asia sẽ sử dụng hệ điều hành Ubuntu 20.04 để thực hiện demo crontab.
- Bước 1: Kiểm tra Cron đã được cài đặt hay chưa?
sudo systemctl status cron
Nếu kết quả như sau thì cron đã được cài đặt, bạn có thể bỏ qua các step setup:
- Bước 2: Update các package
sudo apt update
- Bước 3: Cài đặt cron
sudo apt install cron
- Bước 4: Enable cron mỗi khi khởi động
sudo systemctl enable cron
3. Cách Cron hoạt động
Các công việc cron được ghi lại và quản lý trong một tệp đặc biệt được gọi là crontab. Mỗi user đều có một crontab riêng được lưu ở /var/spool/cron/crontabs/
.
Để thêm một cronjob, bạn sẽ mở crontab của mình thêm một cron được viết dưới dạng a cron expression
. Một biểu thức cron được chia làm 2 phần: lịch trình (schedule) và câu lệnh (command).
- Cấu trúc
* * * * * command được thực hiện
- - - - -
| | | | |
| | | | +----- ngày trong tuần (0 - 6) (Sunday=0)
| | | +------- tháng (1 - 12)
| | +--------- ngày trong tháng (1 - 31)
| +----------- giờ (0 - 23)
+------------- phút (0 - 59)
Phần schedule còn nhận một số giá trị đặc biệt, nhằm viết biểu thức cron một cách dễ dàng hơn:
*
: Tất cả các giá trị
-
: Khoảng giá trị. VD: 6-8 cột giờ thực hiện lúc 6h, 7h, 8h
,
: Liệt kê các giá trị. VD: 10,20,30 cột phút thực hiện ở các phút 10, phút 20, phút 30.
/
: Bước nhảy giá trị. VD: **/15 8-10/2 * * ** sẽ thực hiện vào 8h00, 8h15, 8h30, 8h45, 10h00, 10h15, 10h30, 10h45
Ví dụ:
* * * * * - Chạy command mỗi phút
0,15,30,45 * * * * - Chạy command mỗi 15 phút.
*/15 * * * * - Giống như trên.
0 4 * * * - Chạy command mỗi ngày 4 giờ sáng.
0 4 * * 2-4 - Chạy command vào 4 giờ chiều Thứ 3, Thứ 4, Thứ 5.
20,40 */8 * 7-12 * - Chạy command vào phút 20 và 40 mỗi 8 giờ vào tháng 7 đến tháng 12.
Một số syntax đặc biệt:
@yearly Chạy một lần mỗi năm
"0 0 1 1 *"
@annually (Tương tự @yearly)
@monthly Chạy mỗi tháng một lần "0 0 1 * *"
@weekly Chạy mỗi tuần một lần "0 0 * * 0"
@daily Chạy một lần mỗi ngày "0 0 * * *"
@midnight (Tương tự @daily)
@hourly Chạy một lần mỗi giờ "0 * * * *"
- Quản lý crontab
Để thêm/sửa/xóa crontab:
crontab -e
Nếu là lần đầu tiên chạy crontab thì OS sẽ hỏi bạn editor sử dụng:
no crontab for sammy - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
Từ lần thứ 2:
Thêm và lưu lại, crontab không cần khởi động lại để áp dụng.
Xem các crontab đang chạy:
crontab -l
Xóa crontab của user:
crontab -r
4. Quản lý output
Do cron là tác vụ chạy background nên không thể biết nó đã thành công hay chưa. Ta có thể thử nghiệm một số cách khác nhau để theo dõi việc hoàn thành của cronjob.
Nếu bạn có một service để gửi mail, bạn có thể gửi kết quả của cron tới email được chỉ định ở MAILTO
trên đầu crontab
MAILTO="example@gmail.com"
SHELL=/bin/bash
HOME=/
* * * * * echo ‘Run this command every minute’
Bạn cũng hoàn toàn có thể ghi oupt ra một log file:
* * * * * echo ‘Run this command every minute’ >> /path/to/file.log
5. Hạn chế truy cập
Bạn có thể quản lý user nào được phép sử dụng crontab với các file cron.allow
và cron.deny
, cả hai file này đều nằm ở thư mục / etc /
.
Nếu cron.allow
tồn tại thì chỉ user được list mới edit được crontab. Nếu cả 2 file cùng tồn tại và cùng user được list thì cron.allow
sẽ được ưu tiên hơn.
Cú pháp:
sudo echo ALL >>/etc/cron.deny
sudo echo testuser>>/etc/cron.allow
Trên đây là những hướng dẫn từ cơ bản tới chi tiết của chuyên gia từ CO-WELL Asia về tự động công việc bằng Cron trên Linux. Đừng quên theo dõi chuyên mục CODEWELL trên website CO-WELL Asia để đón đọc những bài viết công nghệ bổ ích nhé!
TrangDT – CO-WELL Asia