Tạo và quản lý Cron jobs trong Ubuntu Server

1. Giới thiệu:

1.1.Cron jobs là gì

Cron là một trong những công cụ được yêu thích nhất ở Linux, đặc biệt là đối với những developer hay quản trị viên Server.
Cron cho phép bạn chạy các lệnh tự động với khoảng thời gian, ngày tháng hay thời gian cụ thể nhằm thực hiện các mục đích cụ thể. Ví dụ, chúng ta có thể dùng Cron để lên lịch tự động sao lưu, cập nhập, thông báo khi có vấn đề ...

1.2.Cron jobs làm việc như thế nào

Cron jobs chạy nền và liên tục kiểm tra tệp /etc/crontab, hay các thư mục /etc/cron./* và /var/spool/cron/. Các cron files không được chỉnh sửa trực tiếp mà phải thông qua lệnh crontab, và mỗi người dùng có một crontab riêng biệt.

Lệnh tạo và chỉnh sửa Cron jobs cũng giống nhau và đơn giản. Và điều thú vị hơn nữa là bạn không cần phải khởi động lại cron sau khi tạo tệp mới hoặc chỉnh sửa tệp hiện có.

2.Tìm hiểu về crontab

Lệnh crontab rất đơn giản, chúng ta chỉ cần nhớ một số lệnh chính
→ Tạo và chỉnh sửa cron

crontab -e

→ Xem các cron được lưu

crontab -l

→ Xóa cron

crontab -r

Tuy nhiên, việc chúng ta cần tìm hiểu là cú pháp của cron.

2.1.Cú pháp crontab

Giống như bất cứ ngôn ngữ nào, làm việc với cron sẽ dễ dàng hơn nếu như chúng ta hiểu cú pháp, cron có hai định dạng mà ta nên biết

A B C D E username /path/to/command arg1 arg2
OR
A B C D E username /root/backup.sh

Trong đó

|      |   giải thích      |    giá trị cho phép    |
|------|-------------------|------------------------|
|  A   |   phút            |   0 - 59               |
|  B   |   giờ             |   0 - 23               |
|  C   |   ngày            |   0 - 31               |
|  D   |   tháng           |   0 - 12               |
|  E   |   ngày trong tuần |   0 - 7                |
|      |     1 là thứ 2, 0 hoặc 7 là chủ nhật       |
| user | tên người dùng của bạn (tùy chọn)          |
| /path/to/command đường dẫn đến lệnh muốn chạy     |

Ngoài ra, cron sử dụng các toán tử cho phép bạn sử dụng nhiều ký hiệu trong một trường
→ "*": chỉ định tất cả các giá trị có thể có trong 1 trường
→ ",": chỉ định danh sách các giá trị
→ "-": chỉ định dải các giá trị
→ "/": chỉ định bước các giá trị

Chúng ta đã hiểu qua về cú pháp và toán tử, để dễ hiểu thì tiếp tục tìm hiểu qua các ví dụ.

2.2.Ví dụ

Về thư mục home của user, tạo file hello.sh

cd ~
sudo nano hello.sh
sudo chmod a+x hello.sh

Nhập vào nội dung sau, script này có tác dụng lấy giờ phút giây của hệ thống và lưu ra file có tên file-giờphútgiây.txt

#!/bin/bash
i = $(date '+%H%M%S')
echo $i > file-$i.txt

Tạo crontab mới

crontab -e

Lần đầu khi chạy thì crontab sẽ hỏi bạn sử dụng trình editor nào, nhấn số tương ứng với editor đó để lựa chọn.

→ Chạy hello.sh mỗi phút một lần
Sau đó nhập vào nội dung sau, ý nghĩa là sẽ chạy file hello.sh mỗi phút một lần (mục đích để kiểm tra thôi)

* * * * * /path/to/command/hello.sh >/dev/null 2>&1

hoặc là

*/1 * * * * /path/to/command/hello.sh

Giờ bạn có thể chờ khoảng 2,3 phút vào kiểm tra kết quả, bạn có thể thấy những file đã tạo ra tự động sau mỗi phút.

→ Chạy hello.sh vào 3h sáng mỗi ngày

0 3 * * * /path/to/command/hello.sh

→ Chạy hello.sh vào 4h30 chiều ngày mùng hai hàng tháng

30 16 2 * * /path/to/command/hello.sh

→ Chạy hello.sh vào 10h tối ngày thường trong tuần (từ thứ 2 đến thứ 6)

0 22 * * 1-5 /path/to/command/hello.sh

→ chạy vào 25 phút sau nửa đêm, 2 và 4h sáng

25 0-23/2 * * * /path/to/command/hello.sh

→ chạy vào 4h5p mỗi chủ nhật

5 4 * * sun /path/to/command/hello.sh
Chú ý: Ngoài bash script, chúng ta có thể dùng để chạy php script, perl, python script ...

2.3. Chuỗi trong crontab

Chuỗi là một trong những thứ yêu thích của developer vì chúng giúp tiết kiệm thời gian bằng cách loại bỏ việc viết lặp đi lặp lại. Cron có các chuỗi cụ thể mà bạn có thể sử dụng để tạo các lệnh nhanh hơn:

|             |   ý nghĩa         |   giá trị tương ứng    |
|-------------|-------------------|------------------------|
|   @hourly   |   chạy hàng giờ   |   0 * * * *            |
|  @midnight  |   chạy hàng ngày  |   0 0 * * *            |
|   @daily    |   chạy hàng ngày  |   0 0 * * *            |
|   @weekly   |   chạy hàng tuần  |   0 0 * * 0            |
|   @monthly  |   chạy hàng tháng |   0 0 1 * *            |
|   @annually |   chạy hàng năm   |   0 0 1 1 *            |
|   @yearly   |   chạy hàng năm   |   0 0 1 1 *            |
|   @reboot   |   chạy mỗi khi khởi động lại server        |

Ví dụ, sao lưu hệ thống hàng tuần

@weekly /path/to/backup/script.sh

Đến giờ, bạn đã biết những gì bạn cần để tạo và quản lý các tác vụ hệ thống bằng Cron. Bạn có thể bắt đầu thiết lập và duy trì một số môi trường bằng cách sử dụng crontab.
Ngoài ra, bạn có thể đọc bài viết của Ubuntu về cách sử dụng Cron tại đây(https://help.ubuntu.com/community/CronHowto).

2.4. Một số trang web tạo crontab trực tuyến

Crontab Generator
Cron Maker
Crontab Guru
Easycron

3. Kết luận

Đến đây, mình đã giới thiệu Cron jobs là gì, cách tạo Cron jobs bằng crontab. Nếu có khó khăn hay có câu hỏi gì hãy đừng ngại ngần mà viết comment ở phần bên dưới nhé.