Linux Crontab: các ví dụ về cách sử dụng Crontab

LINUX CRONTAB: 15 VÍ DỤ VỀ CÁCH SỬ DỤNG CRONTAB

Một người quản trị hệ thống linux có kinh nghiệm sẽ biết được tầm quan trọng của việc chạy các công việc bảo dưỡng định kỳ ở chế độ chạy nền và tự động.

Linux crontab là một tiện ích rất có hiệu quả để sắp xếp một công việc thường xuyên chạy ở chế độ nền tại một thời gian hoặc ngày cụ thể trên cơ sở liên tục.

Trong bài viết này chúng ta hãy cùng nhau xem xét các ví dụ tuyệt vời của việc lập kế hoạch crontab.

Định dạng của Linux Crontab

MIN HOUR DOM MON DOW CMD

Bảng: Các trường trong crontab và phạm vi cho phép hoạt động (Cú pháp lệnh Linux Crontab).

TrườngMô tảGiá trị cho phép.
MINPhút0 – 59
HOURGiờ0 – 23
DOMNgày trong tháng1 – 31
MONTháng1 – 12
DOWNgày trong tuần0 – 6
CMDLệnhTất cả các lệnh có thể thực thi

1. Làm thế nào để xem các mục trong crontab:

Hiển thị tất cả các mục crontab của người dùng đã thiết lập.

Để hiển thị các mục crontab ta thực hiện crontab –l từ tài khoản sẽ hiển thị như sau.

Ví dụ:

1

[dangkhoa1@dangkhoavps ~]# crontab -l

@yearly /home/dangkhoavp/annual-maintenance

*/10 * * * * /home/dangkhoavp/check-disk-space

[chú ý: Hiển thị crontab của người dùng hiện hành đã đăng nhập]

Xem các mục crontab của tài khoản root.

Đăng nhập vào với người dùng root (su – root) và thực hiện crontab –l  như hình dưới đây.

2

Xem các crontab của các user khác trong linux.

Để xem các mục crontab của các người dùng linux khác. Ta đăng nhập vào tài khoản root và sử dụng crontab –u {username} –l như hình dưới đây.

3

[root@dangkhoavps ~]# crontab -u dangkhoa2 -l

@monthly /home/sathiya/monthly-backup

00 09-18 * * * /home/sathiya/check-db-status

2. Làm thể nào để chỉnh sửa các mục crontab:

Chỉnh sửa các mục crontab của user đang hiện hành.

Để chỉnh sửa các mục crontab, ta sử dụng  crontab –e như hình dưới đây. Mặc định sẽ chỉnh sửa crontab của user đang hiện hành.

[dangkhoa1@dangkhoavps ~]# crontab -e

@yearly /home/ramesh/centos/bin/annual-maintenance

*/10 * * * * /home/ramesh/debian/bin/check-disk-space

4

5

Khi bạn lưu lại các tập tin tạm thời trên với 😡 nó sẽ lưu crontab vả hiển thị các thông báo sau đây cho thấy các crontab đã được sửa thành công.

6

Chỉnh sửa các mục crontab của tài khoản root.

Đăng nhập bằng tài khoản root (su – root) và thực hiện crontab –e như hình dưới.

[root@dangkhoavps ~]# crontab -e

7

Chỉnh sửa các mục crontab của người dùng khác.

Để chỉnh sửa các mục crontab của các người dùng khác, ta đăng nhập và tài khoản root và sử dụng conrtab –u {username} –e như hình dưới.

8

9

[root@dangkhoavps ~]# crontab -u dangkhoa2 -e

@monthly /home/sathiya/fedora/bin/monthly-backup

00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status

3. Lập kế hoạch để thực hiện công việc với thời gian xác định:

Việc sử dụng cơ bản của crontab là thực hiện một công việc trong một thời gian cố định. Trước hết ta cần thực hiện một script sao lưu toàn bộ dữ liệu vào ngày 10 tháng 06 lúc 8 giờ 30 sáng.

Lưu ý rằng các trường thời gian là giờ sử dụng định dạng 24 giờ. Nên ta sử dụng 8:00  cho 8 giờ sáng và 20:00 cho 8 giờ tối.

Để tạo bắt đầu tạo 1 script ta nhấn crontab –e:

10

30  8 10 06 * /home/dangkhoavp/full-backup

11

  • 30– Phút thứ 30
  • 08– Lúc 8giờ sáng
  • 10– Ngày thứ 10 trong tháng
  • 06– Tháng 6
  • *– Tất cả các ngày trong tuần.

Sau khi ta hoàn thành đoạn script và lưu lại. Khi ta nhận được thông báo như hình dưới là đã thêm đoạn script thành công.

12

Đối với tất cả các crontab ta có thể sử dụng crontab –l để xem lại.

Ta thực hiện theo các bước xem và chỉnh sửa crontab để thực hiện các ví dụ bên dưới nhé.

4. Lên kế hoạch công việc thực hiện 2 lần trong 1 ngày:

Cái script này sẽ gia tăng số lần sao lưu dữ liệu lên 2 lần trong 1 ngày.

Ví dụ script thực hiện sao lưu dữ liệu 2 lần và lúc 11 giờ và 4 giờ chiều vào mỗi ngày. Dấu phẩy tách các giả trị trong cùng 1 trường để xác định lẹnh đó cần thực hiện vào các khoảng thời gian để cập.

00 11,16 * * * /home/dangkhoavp/bin/incremental-backup

14

  • 00– 0 Phút (Đầu Giờ)
  • 11,16– 11 giờ sáng và 4 giờ chiều
  • *– Tất cả các ngày
  • *– Tất cả các tháng
  • *– Các ngày trong tuần.

15

5. Lên lịch công việc cho phạm vi thời gian cụ thể (Ví dụ: chỉ trên ngày trong tuần):

Nếu bạn muốn có một công việc lên kế hoạch thực hiện cho mỗi giờ với phạm vi thời gian đặc biệt bạn có thể thực hiện như sau:

Cronjob thực hiện hằng ngày trong giờ làm việc.

16

Ví dụ này sẽ kiểm tra tình trạng của cơ sở dữ liệu mỗi ngày (bao gồm cả ngày nghĩ) trong suốt thời gian làm việc từ 9 giờ sáng đến 6 giờ chiều.

00 09-18 * * * /home/dangkhoavp/bin/check-db-status

  • 00– 0 phút (Đầu giờ)
  • 09-18– 9 giờ, 10 giờ, 11giờ, 12 giờ, 1 giờ, 2 giờ, 3 giờ, 4 giờ, 5 giờ, 6 giờ.
  • *– Mỗi ngày
  • *– Mỗi tháng
  • *– Các ngày trong tuần.

Ví dụ này sẽ kiểm tra tình trạng của cơ sở dữ liệu mỗi ngày (Không bao gồm thứ 7 và chủ nhật) trong suốt thời gian làm việc từ 9 giờ sáng đến 6 giờ chiều.

00 09-18 * * 1-5 /home/dangkhoavp/bin/check-db-status

  • 00– 0 phút (Đầu giờ)
  • 09-18– 9 giờ, 10 giờ, 11giờ, 12 giờ, 1 giờ, 2 giờ, 3 giờ, 4 giờ, 5 giờ, 6 giờ.
  • *– Mỗi ngày
  • *– Mỗi tháng
  • 1-5–  Thứ 2, thứ 3, thứ 4, thứ 5 và thứ 6 (các ngày trong tuần).

17

6. Lên lịch công việc chạy mỗi phút sử dụng cron.

Lý tưởng nhất là bạn có thể không có một yêu cầu để sắp xếp 1 công việc mỗi phút. Nhưng khi hiểu ví dụ này sẽ giúp cho bạn hiểu các ví dụ khác được đề cập dưới đây trong bài viết này.

* * * * * CMD

Dấu * có nghĩa là tất cả các đơn vị có thể – tức là mỗi phút, mỗi giờ trong suốt năm. Hơn nữa việc sử dụng trực tiếp dấu *, bạn sẽ thấy nó rất hữu ích trong các trường hợp sau.

  • Khi bạn chỉ định */5 ở trường phút nghĩa là mỗi 5 phút.
  • Khi bạn chỉ định 0 – 10/2 ở trường phút nghĩa là mỗi 2 phút trong 10 phút đầu tiên.
  • Do đó quy ước trên có thể được sử dụng cho tất cả 4 trường khác.

7. Lên kế hoạch công việc chạy nền 10 phút 1 lần.

Sử dụng như sau, nếu bạn muốn kiểm tra dung lượng trống của ổ đĩa mỗi 10 phút.

*/10 * * * * /home/dangkhoavp/check-disk-space

18

Nó thực hiện các lệnh đặc biệt để kiểm tra dung lượng trống của ổ đĩa mỗi 10 phút trong suốt năm. Nhưng bạn có thể có một yêu cầu thực thi lệnh này chỉ trong giờ hành chính hoặc ngược lại. những ví dụ trên cho thấy làm thế nào để làm điều đó.

Thay vì quy định cụ thể giá trị trong 5 trường. Chúng ta có thể xác định nó sử dụng một từ khóa duy nhất như đã để cập dưới đây.

Có những trường hợp đặc biệt, trong đó thay vì 5 trường trên bạn có thể sử dụng @ theo sau là một từ khóa – chẳng hạn như khởi động lại nữa đêm, hằng năm, hàng giờ.

Các từ khỏa đặc biệt trong cron và ý nghĩa của nó:

KeywordEquivalent
@yearly0 0 1 1 *
@daily0 0 * * *
@hourly0 * * * *
@rebootRun at startup

8. Lên lịch công việc với mỗi phút đầu tiên của năm sử dụng @yearly:

Nếu bạn muốn có một công việc thực hiện trên những phút đầu tiên của năm. Khi đó bạn có thể sử dụng từ khóa @yearly trong cron như hình dưới đây.

Điều nãy sẽ thực hiện việc bảo trì hệ thống hằng năm sử dụng script bảo trì hệ thống hàng năm vào lúc 00:00 ngày 1 tháng 1 cho mỗi năm.

19

@yearly /home/dangkhoavp/red-hat/bin/annual-maintenance

9. Lên lịch bắt đầu công việc vào mỗi tháng sử dụng @monthly:

Nó tương tự như các câu lệnh sử dụng @yearly như ở trên. Nhưng thực thi lệnh hằng tháng sau khi sử dụng từ khóa @monthly.

Điều này sẽ thực thi sẽ thực thi script sao lưu dữ liệu vào lúc 00:00 giờ vào ngày 1 thằng tháng.

20

@monthly /home/dangkhoavp/full-backup

10. Lên lịch một công việc chạy nền mỗi ngày sử dụng @daily:

Sử dụng các từ khóa @daily, nó sẽ thực hiện dọn dẹp các tập tin log hằng ngày sử dụng script dọn dẹp log và lúc 00:00 giờ hằng ngày.

21

@daily /home/dangkhoavp/bin/cleanup-logs "day started"

11. Làm thể nào để thực thi một lệnh linux sau mỗi khi khởi động lại, sử dụng @reboot:

Sử dụng các từ khóa @reboot, điều này sẽ thực hiện lệnh chỉ định sau khi mỗi lần máy khởi động lại.

22

@reboot CMD

12. Làm thế nào để vô hiệu hóa/ chuyển hướng mail gửi đi trong crontab mail sử dụng từ khóa MAIL:

Crontab mặc định sẽ gửi những công việc cho người sử dụng và những người lên kế hoạch công việc. Nếu bạn muốn chuyển hướng gửi mail đến người dùng được chỉ định, thêm hoặc cập nhật các biến MAIL trong crontab như sau:

[root@dangkhoavps ~]# crontab -l

MAIL="dangkhoa@123host.vn"

@yearly /home/dangkhoavp/annual-maintenance

*/10 * * * * /home/dangkhoavp/check-disk-space

23

Nếu như bạn muốn không gửi mail đến bất kỳ người nào, tức là để ngăn chặn crontab không được gửi qua email. Thêm hoặc cập nhật các biến MAIL trong crontab như trong hình:

24

MAIL=""

13. Làm thế nào để thực hiện môt cron job linux mỗi 2 lần sử dụng crontab.

Bạn không thể thiết lập lịch cronjob mỗi giây. Bởi vì trong cron đơn vị tối thiểu là phút. trong trường hợp điển hình, không có lý do cho hầu hết chúng ta phải chạy bất kỳ công việc mỗi thứ 2 trong hệ thống.

14. Chỉ định biến PATH trong crontab:

Tất cả các ví dụ trên, chúng ta xác định đường dẫn tuyệt đối của lệnh linux hoặc script mà cần phải thực thi.

Ví dụ: thay vì chỉ định /home/dangkhoavp/tape-backup, nếu bạn muốn chỉ định script, sau đó thêm đường dẫn /home/dangkhoa vào biến PATH trong crontab như hình dưới đây:

25

[root@dangkhoavps ~]# crontab –l

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh

@yearly annual-maintenance

*/10 * * * * check-disk-space

15. Cài đặt Crontab từ tập tin cron:

Thay vì trực tiếp chỉnh sửa tập tin crontab, bạn cũng có thể thêm tất cả các mục để trong một file cron. Một khi bạn có tất cả các mục trong tập tin, bạn có thể tải lên hoặc cài đặt chúng vào các cron như hình dưới đây.

[root@dangkhoavps ~]# crontab -l

no crontab for root

[root@dangkhoavps ~]# vi cron-file.txt

@yearly /home/ramesh/annual-maintenance

*/10 * * * * /home/ramesh/check-disk-space

[root@dangkhoavps ~]# crontab cron-file.txt 

[root@dangkhoavps ~]# crontab –l 

@yearly /home/ramesh/annual-maintenance

*/10 * * * * /home/ramesh/check-disk-space

26

Chú ý: Điều này sẽ cài đặt cron-file.txt để thực hiện công việc định kỳ của bạn, và cũng sẽ gỡ bỏ thư mục cron cũ của bạn. Vì vậy hãy cẩn thận khi tải lên mục cron từ một cron-file.txt

Đến đây các bạn có thể sử dụng được lệnh cronjob để lên lịch các công việc đơn giản.

Chúc các bạn thành công!

Rate This Article

Leave A Comment?