Skip to content Skip to main navigation Skip to footer

Hướng dẫn sử dụng Cron Job

how-to-use-huong-dan-su-dung-cron-job

Trong bài viết này mình sẽ giúp các bạn làm quen về Cron Job và hướng dẫn sử dụng Cron Job.

I. Cron Job là gì?

Cron là một chương trình tiện ích để giúp lặp lại các tác vụ sau này. Đưa ra một lệnh lập lịch cho một tác vụ, tại một thời điểm cụ thể, lặp đi lặp lại là một công việc cần thực hiện thường xuyên.

Nếu bạn muốn lên lịch cho công việc một lần, trong thời gian sau đó, bạn có thể muốn sử dụng một lệnh khác. Tuy nhiên, đối với các công việc định kỳ, cron là giải pháp hoàn hảo.

II. Hướng dẫn sử dụng Cron Job

Trước khi đi vào hướng dẫn sử dụng Cron Job chúng ta cần phải SSH hoặc truy cập VPS hoặc máy chủ của bạn với quyền root trước. Nếu bạn chưa biết cách SSH vào VPS hoặc Server của bạn thì bạn có thể tham khảo bài viết hướng dẫn sau:

1. Các tệp và thư mục cấu hình của Cron Job

– Cron được điều khiển bởi một tập hợp các tệp được gọi là Crontabs. 
– Có tệp chính sẽ nằm trong /etc/crontab, cùng với tệp crontab cho người dùng trong /var/spool/cron/ . Trong thư mục thứ hai, các tệp được đặt cùng tên với tên người dùng của người dùng.
– Tệp /etc/crontab sẽ tự động thực thi các mục trong một số thư mục con theo chu kỳ thông thường. Các tập lệnh được đặt trong các thư mục khác nhau – /etc/cron.* sẽ được chạy theo khoảng thời gian được đưa ra bên dưới. Tất cả các tập lệnh trong các thư mục này được chạy với đặc quyền root.

THƯ mụcThời gian
/etc/cron.hourlyPhút đầu tiên của mỗi giờ
/etc/cron.dailyTừ 3:05 sáng đến 10,55 chiều mỗi ngày
/etc/cron.weeklyTừ 3:25 sáng đến 11:10 chiều sau 7 ngày kể từ lần thực hiện cuối cùng
/etc/cron.monthlyTừ 3:45 sáng đến 11:30 tối sau một tháng kể từ lần thực hiện cuối cùng

2. Cú pháp sử dụng Cron Job

Để thiết lập Cron Job cấp người dùng sẽ hơi khác một chút. Các tệp trong /var/spool/cron bạn sẽ không được chỉnh sửa trực tiếp. Thay vào đó, chúng ta sẽ sử dụng một chương trình có tên là crontab. Những cú pháp của lệnh crontab sẽ như sau:

AZDIGI Tutorial
Sử dụng:
 crontab [tùy chọn] tệp
 crontab [tùy chọn]
 crontab -n [tên máy chủ]

Các tùy chọn:
 -u [người dùng] xác định người dùng
 -e chỉnh sửa crontab của người dùng
 -l danh sách crontab của người dùng
 -r xóa crontab của người dùng
 -i nhắc trước khi xóa
 -n [host] đặt máy chủ lưu trữ trong cụm để chạy crontabs của người dùng
 -c lấy máy chủ trong cụm để chạy crontabs của người dùng
 -s selinux ngữ cảnh
 -x [mask] bật gỡ lỗi
    

3. Cách chỉnh sửa Cron Job

Cách tốt nhất để chỉnh sửa Cron Job là sử dụng lệnh crontab -e.

Ví dụ như hình dưới đây là mình đã cấu hình sẵn một Cron Job rồi. Nếu bạn chưa bao giờ chỉnh sửa Cron Job thì sẽ không có thông tin nào ở đây cả.

how-to-use-huong-dan-su-dung-cron-job

Sau khi bạn lưu lại Cront Job của mình thì bạn sẽ không cần khởi động lại crontab.

4. Giải thích các trường thời gian và ngày tháng trong Cron Job

Mỗi lệnh Cron Job có 5 trường thời gian và ngày tháng, và nó sẽ dựa vào thời gian của hệ thống để thực hiện. Các lệnh được thực hiện khi thời gian được chỉ định bởi các trường thời gian/ngày khớp với thời gian của hệ thống.

AZDIGI Tutorial
Các giá trị trường được phép
----- --------------                  
Phút 0-59                  
Giờ 0-23                  
Ngày trong tháng 0-31                  
Tháng 1-12 (hoặc tên, xem bên dưới)                  
Ngày trong tuần(thứ) 0-7 (0 hoặc 7 là CN, hoặc sử dụng tên)
    

Một trường có thể là dấu hoa thị (*), nghĩa là nó sẽ là tất cả giá trị của trường đó. Vì vậy, khi được sử dụng (*) trong trường tháng, nó có nghĩa là hàng tháng từ 1 (tháng 1) đến 12 (tháng 12).

Ví dụ về Cron Job:

AZDIGI Tutorial
# Example of job definition:
 .---------------- phút (0 - 59)
 | .------------- giờ (0 - 23)
 | | .---------- ngày trong tháng (1 - 31)
 | | | .------- tháng (1 - 12) HOẶC jan, feb, mar, apr ...
 | | | | .---- ngày trong tuần (0 - 6) (Chủ nhật = 0 hoặc 7) HOẶC CN, mon, tue, wed, thu, fri, sat
 | | | | |
 0 1 * * * [tên người dùng] [lệnh được thực thi]
    

Bây giờ bạn đã học cách viết cú pháp Cron Job đúng cách, mình sẽ cung cấp cho bạn thêm các ví dụ để giúp bạn hiểu các quy tắc được nêu ở trên tốt hơn:

Trước khi tiếp tục, hãy nhớ rằng đầu ra của lệnh sẽ được tự động gửi đến tài khoản email cục bộ của bạn. Vì vậy, nếu bạn muốn ngừng nhận những email này, bạn có thể thêm /dev/null 2>&1 vào cú pháp như trong ví dụ sau:

AZDIGI Tutorial
0 5 * * * /root/backup.sh >/dev/null 2>&1
    

Nếu bạn muốn gửi đầu ra email đến một tài khoản cụ thể, thì bạn có thể thêm MAILTO theo sau là địa chỉ email. Đây là một ví dụ:

AZDIGI Tutorial
MAILTO = "myname@azdigi.com"
0 5 * * * /root/backup.sh >/dev/null 2>&1
    

Dưới đây là các ví dụ cú pháp khác:

Cron JobÝ nghĩa
0 0 * * * /bin/sh backup.shĐể thực hiện sao lưu cơ sở dữ liệu vào lúc nửa đêm và chạy mỗi ngày một lần.
0 6,18 * * * /bin/sh backup.shĐể thực hiện sao lưu cơ sở dữ liệu hai lần một ngày vào lúc 6 giờ sáng và 6 giờ chiều.
0 */6 * * * /scripts/monitor.shĐể thực hiện giám sát sáu giờ một lần.
*/10 * * * * /home/user/script.shĐể thực hiện một công việc cron cho tệp script nằm trong thư mục chính cứ sau 10 phút.
0 * 20 7 * /bin/sh backup.shĐể chạy sao lưu cơ sở dữ liệu mỗi giờ vào ngày 20 tháng 7.
0 0 * * 2 * /bin/shĐể chạy một bản sao lưu cơ sở dữ liệu vào lúc nửa đêm Thứ Ba hàng tuần.
* * * 1,2,5 *  /script/script.shĐể chạy một lệnh trong tháng Giêng, tháng Hai và tháng Năm.
10-59/5 5 * * * /home/user/script.shĐể chạy lệnh 5 phút một lần lúc 5 giờ sáng, bắt đầu lúc 5 giờ 10 phút sáng.
0 8 1 */3 * /home/user/script.shĐể chạy lệnh hàng quý vào ngày đầu tiên lúc 8 giờ sáng.
* * * * * /scripts/script.sh; /scripts/scrit2.shĐể đặt lịch cho nhiều công việc trên một công việc cron chạy mỗi phút duy nhất.
@reboot /scripts/script.shĐể thực hiện một tác vụ nhất định mỗi khi khởi động hệ thống.
0 0 1 * *  /home/user/script.shĐể chạy lệnh vào ngày đầu tiên hàng tháng

Ngoài ra bạn có thể xem thêm với các ví dụ tại trang sau:

5. Quyền của Cron

– Để cho phép người dùng truy cập Cron Job, các tệp /etc/cron.allow và /etc/cron.deny có thể được sử dụng để cho phép hoặc từ chối quyền truy cập tương ứng. Đơn giản, hãy đặt một tên người dùng vào một trong hai tệp để cho phép hoặc từ chối quyền truy cập vào crontab. 
– Nếu tệp /etc/cron.allow tồn tại tên người dùng đó thì tệp /etc/cron.deny sẽ không được sử dụng. 
– Trong cài đặt mặc định chỉ tồn tại một tệp trống /etc/cron.deny.

III. Tổng kết

Hy vọng bài hướng dẫn sử dụng Cron Job này giúp bạn tránh được việc bỏ lỡ công việc đúng thời hạn.

Xem thêm các bài viết hữu ích về VPS Linux tại đường dẫn sau:

Nếu các bạn cần hỗ trợ các bạn có thể liên hệ bộ phận hỗ trợ theo các cách bên dưới:

Chương trình "Ưu đãi Mạnh - Phục hồi Nhanh" lên đến 50% cho Hosting và VPSXem chi tiết