Cài đặt và cấu hình Cronjob trên Ubuntu

Cronjob là chương trình lên lịch để chạy các tác vụ một cách tự động, nó cũng giống như chương trình Task Schedule của Windows.

Ubuntu CronTab
Ubuntu CronTab

1. Cấu trúc file CronTab

  • Cron sẽ sử dụng một hệ thống các file được gọi là crontabs để cấu hình
  • File cấu hình chính của Cron là /etc/crontab . Các file crontab khác nằm ở thư mục /var/spool/cron/, mỗi người dùng sẽ có 1 file riêng biệt đặt cùng tên với người dùng.
  • Ngoài các file này ra thì còn 1 số các thư mục khác như cron.d , cron.daily , cron.hourly , cron.monthly , cron.weekly phụ trách các kế hoạch theo giờ, ngày, tháng, tuần

2. Các lệnh thường dùng với CronTab

Để chỉnh sửa CronTab của người dùng hiện tại ta dùng lệnh

user@server~: crontab -e
Lần đầu chạy sẽ hiển thị để bạn lựa chọn chương trình soạn thảo
Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed
Choose 1-4 [1]:

Để xem danh sách CronTab của người dùng hiện tại ta dùng lệnh

user@server~: crontab -l

3. Cú pháp CronTab

CronTab có cấu gồm: lịch và câu lệnh

Quảng cáo

Ủng hộ website

# .---------------- phút
# |  .------------- giờ
# |  |  .---------- ngày
# |  |  |  .------- tháng
# |  |  |  |  .---- ngày trong tuần
# |  |  |  |  |
# *  *  *  *  * người_dùng  Lệnh thực hiện
  *  *  *  *  *   root    cp -v file1 backup_folder/

Như ví dụ ở trên, các bạn có thể thấy: 5 hoa thị (*) thể hiện theo thứ tự cho phút, giờ, ngày, tháng và ngày trong tuần cách nhau bằng 1 khoảng trống. Cụ thể như sau:

  • Phút – phút của giờ mà lệnh sẽ chạy, trong khoảng từ 0 – 59
  • Giờ – giờ của ngày mà lệnh sẽ chạy, trong khoảng từ 0 – 23
  • Ngày – ngày của tháng mà lệnh sẽ chạy, trong khoảng từ 1 – 31
  • Tháng – tháng mà lệnh sẽ chạy, trong khoảng từ 1 – 12 hoặc sử dụng tên: jan, feb, mar, apr, jun, jul, aug, sep, oct, nov, dec
  • Ngày của tuần – thứ của tuần mà lệnh sẽ , trong khoảng từ 0 – 7 hoặc sử dụng tên: mon, tue, web, thu, fri, sat, sun

Ngoài ra các cú pháp chi tiết hơn:

  • Dấu hoa thị (*) – thể hiện tất cả tham số
  • Dấu phẩy (,) – để duy trì 2 hoặc nhiều lần thực thi một lệnh
  • Dấu gạch nối (-) – để xác định khoảng thời gian thiết lập lần thực thi một lệnh
  • Dấu gạch chéo (/) – để tạo khoảng thời gian cụ thể như cứ 5 phút chạy 1 lần
  • Cuối cùng (L) – cho mục đích cụ thể là chỉ định ngày cuối cùng của tuần trong tháng. Ví dụ, 3L nghĩa là thứ tư cuối cùng.
  • Ngày trong tuần (W) – để xác định ngày trong tuần (ngày mà không phải thứ 7, chủ nhật) gần nhất. Ví dụ, 1W nghĩa là nếu ngày 1 là thứ 7, ngày 2 là chủ nhật thì lệnh sẽ chạy vào thứ hai (ngày 3)
  • Dấu chấm hỏi (?) – để lại khoảng trống

4. Ví dụ Cron

# Dưới đây là ví dụ về file cron của 1 user
SHELL=/bin/bash
MAILTO=james
#
# Chạy lúc 00:05 hàng ngày
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# Chạy lúc 2:15 chiều ngày 1 hàng tháng — kết quả gửi email đến james
15 14 1 * *     $HOME/bin/monthly
# Chạy lúc 10 giờ tối các ngày trong tuần
0 22 * * 1-5    mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
# Chạy lúc 00:23 sáng, 02:23 sáng, 04:23 sáng... Liên tục, cách nhau 2 tiếng và chạy hàng ngày
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
# Chạy lúc 04:05 sáng tất cả các ngày chủ nhật
5 4 * * sun     echo "run at 5 after 4 every Sunday"
# Chạy cách nhau 4 tiếng, ngày 1 hàng tháng và tất cả các ngày thứ 2
0 */4 1 * mon   echo "run every 4th hour on the 1st and on every Monday"
# Chạy lúc 00:00 các ngày chủ nhật và 
0 0 */2 * sun   echo "run at midn on every Sunday that's an uneven date"
# Chạy lúc 4:00 tuần thứ 2 của tháng
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

5. Một số lưu ý khi viết Cron

  • Khi khai báo biến, dấu bằng (=) cần được viết liền, không có khoảng trống.
PATH=$HOME/bin:$PATH
  • Dòng trống, khoảng trắng và tab được bỏ qua. Dòng có dấu thăng (#) ở đầu là dòng comment, dòng comment thì không được ở cùng dòng với lệnh cron
  • Cron cho phép sử dụng list ví dụ: 1,2,5,9 hoặc 0-4,8-12
  • Tên sử dụng cho tháng và thứ sẽ sử dụng 3 ký tự đầu tiên.
  • Ngày trong cron được quy định bởi 2 trường là “ngày của tháng” và “thứ“. Cái này nhiều bạn sẽ dễ hiểu nhầm. Nếu bạn không sử dụng dấu hoa thị (*) thì nó sẽ kết hợp cả 2 trường. Ví dụ: ”30 4 1,15 * 5” sẽ được hiểu là lệnh sẽ chạy vào lúc 04:30 ngày 1 và 15 hàng tháng, đồng thời chạy thêm tất cả các thứ 6
  • Thay vì viết 5 trường thể hiện bằng dấu hoa thị (*) thì bạn có thể dùng các chuỗi sau:
Đoạn mã        Ý nghĩa
------         -------
@reboot        Chạy 1 lần lúc khởi động (startup)
@yearly        Chạy hàng năm, tương tự "0 0 1 1 *".
@annually      (giống với @yearly)
@monthly       Chạy hàng tháng, tương tự "0 0 1 * *".
@weekly        Chạy hàng tuần, tươn tự "0 0 * * 0".
@daily         Chạy hàng ngày, tương tự "0 0 * * *".
@midnight      (tương tự @daily)
@hourly        Chạy hàng giờ, tương tự "0 * * * *".
  • Bạn có thể sử dụng trang web: https://crontab.guru để kiểm tra crontab bạn nhập đã chính xác hay chưa. Khi bạn nhập Crontab nó sẽ đưa ra giải thích rất dễ hiểu, ví dụ: “At 04:05 on every day-of-week from Monday through Friday.

Trên đây mình đã hướng dẫn các bạn cách sử dụng CronTab, chúc các bạn thành công.

Add Comment