TỰ ĐỘNG CÔNG VIỆC BẰNG CRON TRÊN LINUX

25/03/2022 104
cron 5
CODEWELL

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:

cron 1

  • 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

cron 2

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 thc hin
- - - - -
| | | | |
| | | | +----- 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 Th3, Th4, Th5.

    20,40 */8 * 7-12 * - Chạy command vào phút 2040 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:

cron 3

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