NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
20/04/2021
Lượt xem

Crontab là gì? Cách cài đặt và sử dụng Crontab Linux nhanh nhất

20/04/2021
19 phút đọc
Lượt xem

Đánh giá

5/5 - (122 bình chọn)

How to use Crontab có lẽ là câu hỏi quen thuộc đối với các sysadmin. Được biết, Crontab Linux là một dịch vụ giúp thực hiện các task được lên lịch sẵn, giúp cải thiện đáng kể hiệu suất làm việc. Vậy cụ thể Crontab là gì? Làm thế nào để sử dụng Crontab Linux? Bài viết này sẽ giúp bạn giải đáp một cách chi tiết nhất! Cùng Vietnix theo dõi ngay bây giờ!

Crontab là gì?

Crontab là một cách để tạo và chạy các lệnh theo một chu kỳ xác định. Đây là tiện ích giúp lập lịch trình để chạy những dòng lệnh bên phía server, nhằm thực thi một hoặc nhiều công việc nào đó theo thời gian được lập sẵn.

Crontab là gì?
Crontab là gì?

Crontab làm việc như thế nào?

Một cron schedule đơn giản là một text file. Mỗi người dùng có một cron schedule riêng, file này thường nằm ở /var/spool/cron . Crontab files không cho phép bạn tạo hoặc chỉnh sửa trực tiếp với bất kỳ trình text editor nào, trừ phi bạn dùng lệnh crontab.

Một số lệnh thường dùng:

crontab -e: tạo hoặc chỉnh sửa file crontab 
crontab -l: hiển thị file crontab 
crontab -r: xóa file crontab

Hầu hết tất cả VPS đều được cài đặt sẵn crontab, tuy nhiên vẫn có trường hợp VPS không có. Nếu bạn sử dụng lệnh crontab -l mà thấy output trả lại -bash: crontab: command not found thì cần tự cài crontab thủ công.

Cách cài đặt Crontab

Sử dụng lệnh:

yum install cronie

Start crontab và tự động chạy mỗi khi reboot:

service crond start 
chkconfig crond on

Một số ứng dụng phổ biến của cron

Cron có thể được ứng dụng vào rất nhiều việc. Dưới đây là một chia sẻ về việc sử dụng cron của một chuyên gia trên web Opensource.com – David Both:

” Tôi thường sử dụng cron để lên lịch cho những việc gần như là hiển nhiên. Chẳng hạn như phải đều đặn backup mỗi ngày vào 2 giờ sáng.

Giờ hệ thống (tức là giờ hệ điều hành) trên các máy tính của tôi hiện đang sử dụng Network Time Protocol (NTP). Mặc dù NTP đặt thời gian hệ thống, nó lại không đặt thời gian phần cứng. Do đó, tôi sử dụng cron để đặt thời gian phần cứng dựa trên thời gian hệ thống.

Bên cạnh đó, tôi cũng có một chương tình Bash chạy mỗi sáng sớm. Chương trình này tạo ra một “message of the day” (MOTD) trên mỗi máy tính. Tin nhắn này sẽ chứa các thông tin, chẳng hạn như disk usage, thường phải được cập nhật thường xuyên.

Nhiều quy trình và dịch vụ hệ thống, như Logwatch, Iogrotate, hay Rootkit Hunter, đều sử dụng cron để lên lịch các task và chạy chương trình mỗi ngày.”

Nói sơ qua về cách vận hành của cron, trước hết ta nên biết crond daemon là một dịch vụ chạy background enable các chức năng của cron.

Một số ứng dụng phổ biến của cron
Một số ứng dụng phổ biến của cron

Dịch vụ cron sẽ check các file trong thư mục /var/spool/cron/ect/cron.d, và file /etc/anacrontab. Các file này chứa nội dung xác định các công việc mà cron phải chạy trong những khoảng thời gian khác nhau. File cron của người dùng cá nhân được đặt trong /var/spool/cron. Các dịch vụ và ứng dụng hệ thống thường sẽ thêm các file công việc của cron vào /etc/cron.d.

Cách sử dụng Crontab Linux

Cron hoạt động dựa trên các lệnh được chỉ định trong cron table (crontab). Mỗi người dùng, kể cả root, đều có thể có một file cron. Các file này theo mặc định sẽ không tồn tại. Nhưng ta có thể tạo nó trong thư mục /var/spool/cron bằng cách dùng lệnh crontab -e. Ngoài ra, lệnh này cũng có thể được dùng để chỉnh sửa một file cron. Chúng tôi khuyên bạn không nên các sử dụng trình editor tiêu chuẩn (như Vi, Vim, Emacs, Nano,…). Bởi vì sử dụng lệnh crontab không chỉ cho phép bạn chỉnh sửa lệnh, nó còn khởi động lại crond daemon khi ta lưu và thoát trình editor. Lệnh crontab sử dụng Vi làm editor cơ bản của nó, vì Vi luôn luôn khả dụng.

Sử dụng Crontab Linux
Sử dụng Crontab Linux

Các file cron sẽ trống, nên các lệnh phải được thêm từ đầu. Dưới đây là một ví dụ về định nghĩa các công việc trong file cron:

# crontab -e
SHELL=/bin/bash
MAILTO=root@example.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

# backup using the rsbu program to the internal 4TB HDD and then 4TB external
01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2

# Set the hardware clock to keep it in sync with the more accurate system clock
03 05 * * * /sbin/hwclock --systohc

# Perform monthly updates on the first of the month
# 25 04 1 * * /usr/bin/dnf -y update

Ba dòng đầu tiên có nhiệm vụ thiết lập một môi trường mặc định. Môi trường phải được thiết lập phù hợp với nhu cầu của người dùng. Bởi vì cron không cung cấp một môi trường cụ thể nào cả. Biến SHELL chỉ định shell để sử dụng khi các câu lệnh được thực thi. Trong ví dụ này, shell Bash được chỉ định. Biến MAILTO đặt địa chỉ mail nhận các kết quả của cron job. Các mail này có thể cung cấp trạng thái của các cron job (backup, update…). Đồng thời bao gồm cả output mà người dùng muốn khi chạy chương trình thủ công từ cmd. Dòng thứ ba có nhiệm vụ thiết lập PATH cho môi trường.

Có khá nhiều dòng comment ở ví dụ trên. Chúng trình bày chi tiết các cú pháp cần thiết để xác định một cron job. Dưới đây là thông tin cụ thể về từng dòng lệnh:

01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2

Dòng này trong /etc/crontab sẽ chạy một script, thực hiện backup hệ thống.

Tiếp theo

Dòng lệnh này sẽ chạy script trong shell Bash, rsbu, có nhiệm vụ backup tất cả các hệ thống vào 1:01 a.m hằng ngày (01 01). Dấu * nằm ở vị trí ba, bốn và năm của phần thời gian cũng tương tự như các file glob hay wildcard, dùng cho các phân chia thời gian khác. Cụ thể, chúng chỉ định “mỗi ngày trong tháng”, “mỗi tháng”, và “mỗi ngày trong tuần”. Dòng này sẽ chạy backup hai lần. Một lần backup vào ổ cứng backup chuyên dụng ở trong. Lần thứ hai sẽ backup vào một USB drive ở ngoài.

Tiếp theo, dòng lệnh này đặt thời gian phần cứng trên máy tính bằng cách sử dụng thời gian hệ thống làm gốc. Dòng này được thiết lập để chạy vào 5:03 a.m hằng ngày.

03 05 * * * /sbin/hwclock --systohc

Dòng cron job cuối cùng có thể được sử dụng để cập nhật dnf hay yum vào 04: 25 a.m vào ngày đầu tiên của mỗi tháng. Tuy nhiên, nó đã được đặt thành một comment ở ví dụ trên. Cho nên nó sẽ không còn chạy nữa.’

25 04 1 * * /usr/bin/dnf -y update

Quản lý công việc của Crontab

Hầu hết các hoạt động trong Crontab thường được thực hiện ẩn sau màn hình. Do đó, việc kiểm tra xem lệnh đã thực hiện thành công, có xảy ra lỗi hay không là một vấn đề khó khăn đối với người dùng không chuyên nghiệp.

Tuy nhiên, có một cách để thông báo về các hoạt động của Crontab thông qua email. Để làm điều này, trước tiên, bạn cần cài đặt một máy chủ email hoặc dịch vụ chuyển thư đã được tích hợp sẵn trong hệ thống hosting/server của bạn.

Những cú pháp đặc biệt trong Crontab

Một số câu lệnh viết tắt để thay thế cho những câu lệnh của Crontab:

Lệnh viết tắtViết tắt cho lệnh
@hourly0****
@daily 00***
@weekly00**0
@monthly001**
@yearly0011*
@rebootlệnh chạy khi máy chủ khởi động
Những cú pháp đặt biệt trong Crontab

Hướng dẫn tạo lệnh Crontab cực nhanh với Crontab guru

Ngoài ra, bạn có thể truy cập vào Crontab guru và làm theo hướng dẫn là sẽ có ngay code Crontab đã có sẵn để bạn copy.

Ví dụ: Ví dụ, nếu bạn muốn lập lịch để thực hiện một công việc vào lúc 22:00 hàng ngày từ thứ Hai đến thứ Sáu, bạn có thể sử dụng mã Crontab sau:

0 22**1-5

Bên cạnh đó, Crontab guru là một công cụ hữu ích giúp bạn kiểm tra tính đúng đắn của lệnh Crontab. Họ cung cấp thông tin mô tả ở phía trên để giúp bạn xác nhận tính chính xác của lịch trình bạn đã đặt.

Một số mẹo trong việc lên lịch với crontab Linux

Đầu tiên, giả sử bạn muốn chạy một job nào đó vào 3 giờ chiều, mỗi thứ Ba:

00 15 * * Thu /usr/local/bin/mycronjob.sh

Câu lệnh này sẽ thực hiện mycronjob.sh mỗi 3 p.m thứ Ba.

Hay ta cũng có thể chạy các báo cáo theo mỗi quý, sau khi kết thúc từng quý. Mặc dù cron không có tùy chọn cho “Ngày cuối cùng của tháng”, ta có thể sử dụng ngày đầu tiên của tháng tiếp theo, như ở dưới.

02 03 1 1,4,7,10 * /usr/local/bin/reports.sh

Cron job này chạy các báo cáo mỗi quý vào ngày đầu tiên của tháng, sau khi kết thúc một quý.

Câu lệnh dưới đây cho job chạy trong vòng một phút, mỗi giờ một lần, từ 9:01 a.m đến 5:01 p.m.

01 09-17 * * * /usr/local/bin/hourlyreminder.sh

Đôi khi, có những job cần được thực hiện sau mỗi 2, 3 hay 4 giờ. Khi đó, ta có thể lấy thương số của giờ và khoảng thời gian mong muốn. Chẳng hạn như */3, tương đương với job sau mỗi ba giờ. Hay 6-18/3 để chạy mỗi ba tiếng, từ 6 a.m đến 6 p.m. Các khoảng thời gian khác cũng có thể được chia tương tự. Lấy ví dụ, biểu thức */15 ở vị trí phút có nghĩa là “chạy job sau mỗi 15 phút”.

*/5 08-18/* * * /usr/local/bin/mycronjob.sh

Có một điều cần lưu ý là các biểu thức chia phải cho ra kết quả có phần dư bằng 0, khi đó job mới có thể chạy. Do đó, trong ví dụ này, job được thiết lập để chạy năm phút 1 lần (08:05, 08:10, 08:15,…) trong các giờ chẵn từ 8 a.m đến 6 p.m, nhưng không chạy trong các giờ lẻ. Lấy ví dụ, job sẽ không chạy từ 9 p.m đến 9:59 a.m.

Giới hạn truy cập Cron trong Crontab Linux

Việc thường xuyên sử dụng cron có thể dẫn đến một số lỗi, chẳng hạn như tài nguyên hệ thống (bộ nhớ, CPU…) bị sử dụng quá mức. Do đó, sysadmin có thể giới hạn quyền truy cập của người dùng để hạn chế lỗi xảy ra. Cụ thể, hãy tạo một file /ect/cron.allow, chứa danh sách người dùng có quyền tạo cron job. Tuy nhiên, người dùng root không thể bị chặn sử dụng cron.

Giới hạn truy cập Cron trong Crontab Linux
Giới hạn truy cập Cron trong Crontab Linux

Bằng cách ngăn người dùng non-root tạo cron job, các root có thể sẽ cần thêm các cron job vào root crontab. Tuy nhiên, việc này sẽ không chạy các job đó dưới quyền root. Cụ thể, trong ví dụ đầu tiên, trường username trong phần comment có thể được dùng để chỉ định ID người dùng mà job phải có khi nó chạy. Do đó, các job của người dùng non-root sẽ không chạy dưới quyền root.

Minh họa sau đây cho thấy một định nghĩa job, chạy dưới quyền người dùng là “student”:

04 07 * * * student /usr/local/bin/mycronjob.sh

Nếu không có người dùng được chỉ định, job sẽ chạy theo người dùng sở hữu file crontab. Trong trường hợp này chính là root.

cron.d

Thư mục /etc/cron.d là nơi chứa các ứng dụng, như SpamAssassin, sysstat, file cài đặt cron…Vì không có người dùng spamassassin hay sysstat, các chương trình này cần một nơi để định vị các file cron. Vì vậy chúng sẽ được đặt ở trong /etc/cron.d

File /etc/cron.d/sysstat chứa các cron job liên quan đến báo cáo hoạt động hệ thống (SAR). Các file cron này có cùng định dạng với file cron của người dùng.

# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

Cron file sysstat sẽ gồm hai dòng lệnh để thực hiện các task. Dòng thứ nhất chạy lệnh sa1 mỗi 10 phút để thu thập dữ liệu trong các file nhị phân đặc biệt, được đặt ở thư mục /var/log/sa. Sau đó, mỗi tối vào 23:53, chương trình sa2 sẽ chạy để tạo một bản tóm tắt hàng ngày.

anacron

Chương trình anacron thực hiện các chức năng tương ục như crond. Nhưng nó có thể chạy các job đã bị bỏ qua, chẳng hạn như khi máy tính đã tắt hoặc không thể chạy job trong một thời gian nhất định. Công cụ này rất hữu ích với người dùng laptop hoặc các máy tính thường xuyên được đưa vào chế độ sleep.

Ngay sau khi máy tính được khởi động, anacron sẽ kiểm tra xem các job đã được cấu hình có bỏ lỡ lịch chạy nào không. Nếu có, các job này sẽ được chạy ngay lập tức. Nhưng các job sẽ chỉ chạy một lần, bất kể bao nhiều lần nó đã lỡ lịch.

Bên cạnh đó, chương trình anacron cung cấp một số tùy chọn dễ dàng để chạy các task được lên lịch thường xuyên. Chỉ cần cài đặt các script vào trong thư mục /etc/cron.[hourly|daily|weekly|monthly], tùy vào tần suất ta muốn các job chạy.

Cách vận hành của anacron

  1. Dịch vụ crond chạy các cron job được chỉ định trong /etc/cron.d/0hourly.
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

2. Cron job được chỉ định trong /etc/cron.d/0hourly chạy chương trình run-parts mỗi giờ một lần.

3. Chương trình run-parts sẽ chạy tất cả script có trong thư mục /etc/cron.hourly.

4. Thư mục /etc/cron.hourly chứa script 0anacron, script này sẽ chạy chương trình anacron bằng config file /etdc/anacrontab  ở dưới đây:

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
                                                                
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

5. Cuối cùng, chương tình anacron chạy các chương trình có trong /etc/cron.daily hàng ngày; chạy job trong /etc/cron.weekly hàng tuần, và job trong cron.monthly mỗi tháng. Lưu ý rằng thời gian delat trong mỗi dòng giúp ngăn các job này bị trùng nhau.

Thay vì đặt các chương trình Bash hoàn chỉnh trong thư mục cron.X, ta có thể cài đặt chúng trong /usr/local/bin. Việc này cho phép ta chạy chúng hàng ngày dễ dàng từ cmd.

Anacron không được thiết kế để chạy các chương trình theo các thời gian cụ thể. Mà nó sẽ chạy các chương trình tại những khoảng thời gian nhất định, với thời gian bắt đầu xác định. Chẳng hạn như 3 giờ sáng mỗi ngày, vào Chủ nhật, vào ngày đầu của tháng. Nếu có bất kỳ chu kỳ nào bị bỏ lỡ, anacron sẽ chạy các job bị lỡ này một lần.

Shortcut trong crontab Linux

File /etc/anacrontab ở trên cho ta thấy cách các shortcut (phím tắt) có thể được sử dụng, chỉ định một số thời gian phổ biến. Các shortcut thời gian này có thể thay thế đến 5 trường thường dùng để chỉ định thời gian. Kí tự @ dùng để xác định shortcut cho cron. Bên dưới là danh sách một số shortcut và ý nghĩa của chúng:

  • @reboot : Chạy sau khi reboot.
  • @yearly : Chạy hàng năm, ví dụ: 0 0 1 1 *
  • @annually : Chạy hàng năm, ví dụ: 0 0 1 1 *
  • @monthly : Chạy hàng tháng, ví dụ: 0 0 1 * *
  • @weekly : Chạy hàng tuần, ví dụ: 0 0 * * 0
  • @daily : Chạy hàng ngày, ví dụ: 0 0 * * *
  • @hourly : Chạy mỗi giờ, ví dụ: 0 * * * *

Các shortcut này có thể được sử dụng trong nhiều file crontab Linux khác nhau, chẳng hạn như trong /etc/cron.d.

Câu hỏi thường gặp

Khi nào nên Restart crontab?

Một số trường hợp cần Restart crontab như:
– Hệ thống không nhận biết thay đổi
– Phiên bản đã cũ hoặc gặp các vấn đề cụ thể
– Xử lý lỗi hoặc tình trạng không chính xác

Một số Crontab online tốt hiện nay là gì?

Một số crontab online tốt như:
Crontab.guru: https://crontab.guru/
CronTab Generator: https://crontab-generator.org/
Cronmaker: https://www.cronmaker.com/
Online Cron Expression Generator:
https://www.freeformatter.com/cron-expression-generator-quartz.html

Lưu ý rằng: việc sử dụng dịch vụ Crontab online đòi hỏi cẩn thận, đặc biệt là khi bạn đang làm việc với các công việc quan trọng và nhạy cảm. Trong môi trường sản xuất, việc quản lý Crontab thường được thực hiện trực tiếp trên hệ thống.

Crontab every 5 minutes là gì?

Crontab “every 5 minutes” là một thuật ngữ dùng để mô tả tác vụ được lên lịch chạy mỗi 5 phút một lần. Trong crontab, các tác vụ được xác định bởi biểu thức cron, và biểu thức cron để chạy tác vụ mỗi 5 phút là:

*/5 * * * *

Edit Crontab là gì?

Edit Crontab là thao tác chỉnh sửa tệp crontab của bạn. Tệp crontab là một tệp văn bản chứa các mục nhập cron, mỗi mục nhập xác định một tác vụ được lên lịch chạy theo một lịch trình cụ thể.

Để chỉnh sửa crontab, bạn có thể sử dụng lệnh crontab -e. Lệnh này sẽ mở tệp crontab của bạn trong trình soạn thảo văn bản mặc định của bạn. Sau khi chỉnh sửa tệp, hãy lưu và đóng trình soạn thảo.

Lời kết

Hy vọng bài viết trên sẽ giúp bạn biết Contab là gì? Cách vận dụng Contab Linux để lên lịch trình ra sao. Nếu có thắc mắc hay đóng góp ý kiến, mời bạn để lại bình luận phía dưới bài viết này. Vietnix xin chân thành cảm ơn!

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

MAXSPEED HOSTING

TĂNG TỐC WEBSITE TOÀN DIỆN

CÔNG NGHỆ ĐỘC QUYỀN

PHẦN CỨNG MẠNH MẼ

HỖ TRỢ 24/7

ĐĂNG KÝ NGAY
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG