Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Master Linux Crontab:15 ví dụ về lập kế hoạch công việc Cron chuyên nghiệp

Master Linux Crontab:15 ví dụ về lập kế hoạch công việc Cron chuyên nghiệp Quản trị viên hệ thống Linux có kinh nghiệm biết tầm quan trọng của việc tự động chạy các công việc bảo trì định kỳ trong nền.

Tiện ích Linux Cron là một cách hiệu quả để lên lịch công việc nền thường lệ vào một thời điểm và/hoặc ngày cụ thể một cách liên tục.

Bài viết này là một phần của loạt bài Mẹo tăng năng suất dành cho những người đam mê công nghệ đang được phát hành. Trong bài viết này, chúng ta hãy xem xét 15 ví dụ tuyệt vời về lập lịch công việc bằng crontab.

Định dạng Crontab của Linux

MIN HOUR DOM MON DOW CMD
Trường Mô tả Giá trị được phép Trường MINMinute0 đến 59HOURTrường giờ0 đến 23DOMNgày trong tháng1-31MONTrường tháng1-12DOWNgày trong tuần0-6CMDLệnhBất kỳ lệnh nào sẽ được thực thi.

1. Lên lịch công việc trong một thời gian cụ thể

Cách sử dụng cơ bản của cron là thực thi một công việc trong một thời gian cụ thể như dưới đây. Thao tác này sẽ thực thi tập lệnh Shell sao lưu đầy đủ (sao lưu toàn bộ) vào 08:30 sáng ngày 10 tháng 6 .

Xin lưu ý rằng trường thời gian sử dụng định dạng 24 giờ. Vì vậy, lúc 8 giờ sáng hãy dùng 8 giờ và lúc 8 giờ tối hãy dùng 20 giờ.

30 08 10 06 * /home/ramesh/full-backup
  • 30 – Phút thứ 30
  • 08 – 08 giờ sáng
  • 10 – Ngày thứ 10
  • 06 – Tháng thứ 6 (tháng 6)
  • * – Mỗi ngày trong tuần

2. Lên lịch công việc cho nhiều trường hợp (ví dụ:Hai lần một ngày)

Tập lệnh sau thực hiện sao lưu gia tăng hai lần một ngày mỗi ngày.

Ví dụ này thực thi tập lệnh shell sao lưu gia tăng được chỉ định (sao lưu gia tăng) vào lúc 11:00 và 16:00 hàng ngày. Giá trị được phân tách bằng dấu phẩy trong một trường chỉ định rằng lệnh cần được thực thi trong toàn bộ thời gian được đề cập.

00 11,16 * * * /home/ramesh/bin/incremental-backup
  • 00 – Phút thứ 0 (Đầu giờ)
  • 11,16 – 11 giờ sáng và 4 giờ chiều
  • * – Mỗi ngày
  • * – Hàng tháng
  • * – Mỗi ngày trong tuần

3. Lên lịch công việc trong khoảng thời gian cụ thể (ví dụ:Chỉ vào các ngày trong tuần)

Nếu bạn muốn một công việc được lên lịch cho mỗi giờ trong một khoảng thời gian cụ thể thì hãy sử dụng cách sau.

Cron Job hàng ngày trong giờ làm việc

Ví dụ này kiểm tra trạng thái của cơ sở dữ liệu hàng ngày (kể cả cuối tuần) trong giờ làm việc 9 giờ sáng – 6 giờ chiều

00 09-18 * * * /home/ramesh/bin/check-db-status
  • 00 – Phút thứ 0 (Đầu giờ)
  • 18-09 – 9h, 10h, 11h, 12h, 1h, 2h, 3h, 4h, 5h, 6h
  • * – Mỗi ngày
  • * – Hàng tháng
  • * – Mỗi ngày trong tuần

Cron Job mỗi ngày trong tuần trong giờ làm việc

Ví dụ này kiểm tra trạng thái của cơ sở dữ liệu vào mỗi ngày trong tuần (tức là không bao gồm Thứ Bảy và Chủ Nhật) trong giờ làm việc từ 9 giờ sáng đến 6 giờ chiều

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
  • 00 – Phút thứ 0 (Đầu giờ)
  • 18-09 – 9h, 10h, 11h, 12h, 1h, 2h, 3h, 4h, 5h, 6h
  • * – Mỗi ngày
  • * – Hàng tháng
  • 1-5 -Thứ Hai, Thứ Ba, Thứ Tư, Thứ Năm và Thứ Sáu (Mỗi ngày trong tuần)

4. Làm cách nào để xem các mục nhập Crontab?

Xem mục nhập Crontab của người dùng đã đăng nhập hiện tại

Để xem các mục crontab của bạn, hãy nhập crontab -l từ tài khoản unix của bạn như hiển thị bên dưới.

ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
[Note: This displays crontab of the current logged in user]

Xem các mục Crontab gốc

Đăng nhập với tư cách người dùng root (su – root) và thực hiện crontab -l như hiển thị bên dưới.

root@dev-db# crontab -l
no crontab for root

Crontab HowTo:Xem các mục Crontabs của người dùng Linux khác

Để xem các mục crontab của những người dùng Linux khác, hãy đăng nhập vào root và sử dụng -u {username} -l như được hiển thị bên dưới.

root@dev-db# crontab -u sathiya -l
@monthly /home/sathiya/monthly-backup
00 09-18 * * * /home/sathiya/check-db-status

5. Làm cách nào để chỉnh sửa mục nhập Crontab?

Chỉnh sửa mục Crontab của người dùng đã đăng nhập hiện tại

Để chỉnh sửa các mục crontab, hãy sử dụng crontab -e như hiển thị bên dưới. Theo mặc định, thao tác này sẽ chỉnh sửa crontab của người dùng đã đăng nhập hiện tại.

ramesh@dev-db$ crontab -e
@yearly /home/ramesh/centos/bin/annual-maintenance
*/10 * * * * /home/ramesh/debian/bin/check-disk-space
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C
[Note: This will open the crontab file in Vim editor for editing.
Please note cron created a temporary /tmp/crontab.XX... ]

Khi bạn lưu tệp tạm thời ở trên bằng :wq, nó sẽ lưu crontab và hiển thị thông báo sau cho biết crontab đã được sửa đổi thành công.

~
"crontab.XXXXyjWkHw" 2L, 83C written
crontab: installing new crontab

Chỉnh sửa mục nhập Crontab gốc

Đăng nhập với tư cách người dùng root (su – root) và thực hiện crontab -e như hiển thị bên dưới.

root@dev-db# crontab -e

Chỉnh sửa các mục nhập Tệp Crontab của người dùng Linux khác

Để chỉnh sửa các mục crontab của những người dùng Linux khác, hãy đăng nhập vào root và sử dụng -u {username} -e như được hiển thị bên dưới.

root@dev-db# crontab -u sathiya -e
@monthly /home/sathiya/fedora/bin/monthly-backup
00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status
~
~
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C

6. Lên lịch công việc từng phút bằng Cron.

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

* * * * * CMD

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

  • Khi bạn chỉ định */5 trong trường phút có nghĩa là cứ 5 phút một lần.
  • Khi bạn chỉ định 0-10/2 trong trường phút nghĩa là cứ 2 phút một lần 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 còn lại.

7. Lên lịch công việc định kỳ nền cứ sau 10 phút.

Hãy sử dụng cách sau nếu bạn muốn kiểm tra dung lượng ổ đĩa 10 phút một lần.

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

Nó thực thi lệnh check-disk-space được chỉ định cứ sau 10 phút trong suốt cả năm. Nhưng bạn có thể có yêu cầu chỉ thực hiện lệnh trong giờ hành chính hoặc ngược lại. Các ví dụ trên cho thấy cách thực hiện những điều đó.

Thay vì chỉ định giá trị trong 5 trường, chúng ta có thể chỉ định giá trị đó bằng một từ khóa như được đề cập bên dưới.

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à từ khóa — chẳng hạn như khởi động lại, nửa đêm, hàng năm, hàng giờ.

Từ khóa Tương đương @yearly0 0 1 1 *@daily0 0 * * *@hourly0 * * * *@rebootRun khi khởi động.

8. Lên lịch công việc vào phút đầu tiên hàng năm bằng cách sử dụng @yearly

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

Thao tác này sẽ thực hiện bảo trì hệ thống hàng năm bằng cách sử dụng tập lệnh shell bảo trì hàng năm vào lúc 00:00 ngày 1 tháng 1 hàng năm.

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

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

Nó tương tự như @yearly như trên. Nhưng thực thi lệnh hàng tháng một lần bằng cách sử dụng @monthly từ khóa cron.

Thao tác này sẽ thực thi sao lưu băng tập lệnh shell vào lúc 00:00 ngày đầu tiên hàng tháng.

@monthly /home/ramesh/suse/bin/tape-backup

10. Lên lịch công việc nền mỗi ngày bằng cách sử dụng @daily

Sử dụng @daily từ khóa cron, thao tác này sẽ thực hiện dọn dẹp tệp nhật ký hàng ngày bằng cách sử dụng cleanup-logs shell script lúc 00:00 hàng ngày.

@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"

11. Làm cách nào để thực thi lệnh Linux sau mỗi lần khởi động lại bằng @reboot?

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

@reboot CMD

12. Làm cách nào để vô hiệu hóa/chuyển hướng đầu ra thư Crontab bằng từ khóa MAIL?

Theo mặc định, crontab gửi đầu ra công việc cho người dùng đã lên lịch công việc. Nếu bạn muốn chuyển hướng đầu ra đến một người dùng cụ thể, hãy thêm hoặc cập nhật biến MAIL trong crontab như hiển thị bên dưới.

ramesh@dev-db$ crontab -l
MAIL="ramesh"
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
[Note: Crontab of the current logged in user with MAIL variable]


Nếu bạn muốn thư không được gửi đến bất cứ đâu, tức là dừng gửi đầu ra crontab qua email, hãy thêm hoặc cập nhật biến MAIL trong crontab như hiển thị bên dưới.

MAIL=""

13. Cách thực thi công việc Cron Linux mỗi giây bằng Crontab.

Bạn không thể lên lịch cronjob mỗi giây. Vì trong cron đơn vị tối thiểu bạn có thể chỉ định là phút. Trong một tình huống điển hình, không có lý do gì để hầu hết chúng ta phải chạy bất kỳ công việc nào trong mỗi giây trong hệ thống.

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

Tất cả các ví dụ trên chúng tôi đã chỉ định đường dẫn tuyệt đối của lệnh Linux hoặc shell-script cần được thực thi.

Ví dụ:thay vì chỉ định /home/ramesh/tape-backup, nếu bạn chỉ muốn chỉ định tape-backup thì hãy thêm đường dẫn /home/ramesh vào biến PATH trong crontab như hiển thị bên dưới.

ramesh@dev-db$ crontab -l
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh
@yearly annual-maintenance
*/10 * * * * check-disk-space
[Note: Crontab of the current logged in user with PATH variable]

15. Cài đặt Crontab từ tệp Cron

Thay vì chỉnh sửa trực tiếp tệp crontab, trước tiên bạn cũng có thể thêm tất cả các mục vào tệp cron. Khi bạn có tất cả các mục này trong tệp, bạn có thể tải lên hoặc cài đặt chúng vào cron như hiển thị bên dưới.

ramesh@dev-db$ crontab -l
no crontab for ramesh
$ cat cron-file.txt
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
ramesh@dev-db$ crontab cron-file.txt
ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

Lưu ý: Thao tác này sẽ cài đặt cron-file.txt vào crontab của bạn, thao tác này cũng sẽ xóa các mục nhập cron cũ của bạn. Vì vậy, hãy cẩn thận khi tải lên các mục cron từ cron-file.txt.

Hướng dẫn bổ sung về Cron

  • Cron Vs Anacron:Cách thiết lập Anacron trên Linux (Có ví dụ)
  • Cách chạy Cron cứ sau 5 phút, giây, giờ, ngày, tháng
  • 6 ví dụ về lệnh Crontab của Linux
  • Cách cài đặt, chỉnh sửa hoặc xóa công việc định kỳ ở chế độ hàng loạt
  • Hiểu các lệnh at, atq, atrm, batch qua 9 ví dụ

Các bài viết tuyệt vời về Linux

Sau đây là một vài 15 ví dụ tuyệt vời các bài viết mà bạn có thể thấy hữu ích.

  • Mẹ ơi, con tìm thấy rồi! — 15 ví dụ thực tế về lệnh tìm kiếm Linux
  • 15 ví dụ để nắm vững lịch sử dòng lệnh Linux
  • Lệnh Unix LS:15 ví dụ thực tế
  • Hãy nắm bắt Grep! – 15 ví dụ về lệnh Grep thực tế