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à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:
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.
Dịch vụ cron sẽ check các file trong thư mục /var/spool/cron và /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.
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ắt | Viết tắt cho lệnh |
@hourly | 0**** |
@daily | 00*** |
@weekly | 00**0 |
@monthly | 001** |
@yearly | 0011* |
@reboot | lệnh chạy khi máy chủ khởi động |
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.
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/2 * * * /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.
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
- 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!