Android

Lập lịch công việc cron với crontab

#30 - Job Scheduling (cronjob/crontab) on Linux CentOS 8

#30 - Job Scheduling (cronjob/crontab) on Linux CentOS 8

Mục lục:

Anonim

Cron là một trình nền lập lịch biểu thực hiện các nhiệm vụ theo các khoảng thời gian được chỉ định. Các tác vụ này được gọi là công việc định kỳ và chủ yếu được sử dụng để tự động hóa bảo trì hoặc quản trị hệ thống.

Ví dụ: bạn có thể đặt một công việc định kỳ để tự động hóa các tác vụ lặp đi lặp lại như sao lưu cơ sở dữ liệu hoặc dữ liệu, cập nhật hệ thống với các bản vá bảo mật mới nhất, kiểm tra việc sử dụng dung lượng ổ đĩa, gửi email, v.v. Một số ứng dụng, chẳng hạn như Drupal hoặc Magento, yêu cầu các công việc định kỳ để thực hiện các tác vụ nhất định.

Các công việc định kỳ có thể được lên kế hoạch để chạy theo một phút, giờ, ngày trong tháng, tháng, ngày trong tuần hoặc bất kỳ sự kết hợp nào trong số này.

Tập tin Crontab là gì

Crontab (bảng cron) là một tệp văn bản chỉ định lịch trình của các công việc định kỳ. Có hai loại tập tin crontab. Các tệp crontab trên toàn hệ thống và các tệp crontab của người dùng cá nhân.

Các tập tin crontab của người dùng được lưu trữ theo tên người dùng và vị trí của họ thay đổi theo hệ điều hành. Trong hệ thống dựa trên Red Hat như CentOS, các tệp crontab được lưu trữ trong thư mục /var/spool/cron trong khi trên các tệp Debian và Ubuntu được lưu trữ trong thư mục /var/spool/cron/crontabs .

Mặc dù bạn có thể chỉnh sửa các tệp crontab của người dùng theo cách thủ công, bạn nên sử dụng lệnh crontab .

/etc/crontab và các tệp trong thư mục /etc/cron.d là các tệp crontab trên toàn hệ thống chỉ có thể được chỉnh sửa bởi quản trị viên hệ thống.

Trong hầu hết các bản phân phối Linux, bạn cũng có thể đặt các tập lệnh bên trong các thư mục /etc/cron.{hourly, daily, weekly, monthly} và các tập lệnh sẽ được thực thi mỗi hour/day/week/month .

Crontab Cú pháp và Toán tử

Mỗi dòng trong tệp crontab của người dùng chứa sáu trường được phân tách bằng khoảng trắng theo sau là lệnh sẽ được chạy.

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

Năm trường đầu tiên có thể chứa một hoặc nhiều giá trị, được phân tách bằng dấu phẩy hoặc một phạm vi giá trị được phân tách bằng dấu gạch nối.

  • * -Toán tử dấu hoa thị có nghĩa là bất kỳ giá trị hoặc luôn luôn. Nếu bạn có biểu tượng dấu hoa thị trong trường Giờ, điều đó có nghĩa là tác vụ sẽ được thực hiện mỗi giờ. , -Toán tử dấu phẩy cho phép bạn chỉ định danh sách các giá trị cho sự lặp lại. Ví dụ: nếu bạn có 1, 3, 5 trong trường Giờ, tác vụ sẽ chạy vào lúc 1 giờ sáng, 3 giờ sáng và 5 giờ sáng. - Toán tử gạch nối cho phép bạn chỉ định một phạm vi giá trị. Nếu bạn có 1-5 trong trường Ngày trong tuần, tác vụ sẽ chạy mỗi ngày trong tuần (Từ thứ Hai đến thứ Sáu). / -Toán tử gạch chéo cho phép bạn chỉ định các giá trị sẽ được lặp lại trong một khoảng nhất định giữa chúng. Ví dụ: nếu bạn có */4 trong trường Giờ, điều đó có nghĩa là hành động sẽ được thực hiện sau mỗi bốn giờ. Nó giống như chỉ định 0, 4, 8, 12, 16, 20 . Thay vì dấu hoa thị trước toán tử gạch chéo, bạn cũng có thể sử dụng một phạm vi các giá trị, 1-30/10 có nghĩa tương tự như 1, 11, 21 .

Tập tin Crontab trên toàn hệ thống

Cú pháp của tệp crontab trên toàn hệ thống hơi khác so với crontabs của người dùng. Nó chứa một trường người dùng bắt buộc bổ sung chỉ định người dùng nào sẽ chạy công việc định kỳ.

* * * * * command(s) * * * * * command(s)

Macro được xác định trước

Có một số macro lịch biểu Cron đặc biệt được sử dụng để chỉ định các khoảng phổ biến. Bạn có thể sử dụng phím tắt này thay cho thông số ngày năm cột.

  • @yearly (hoặc @annually ) - Chạy nhiệm vụ được chỉ định mỗi năm một lần vào nửa đêm (12:00 sáng) của ngày 1 tháng 1. Tương đương với 0 0 1 1 * . @monthly - Chạy nhiệm vụ được chỉ định mỗi tháng một lần vào nửa đêm vào ngày đầu tiên của tháng. Tương đương với 0 0 1 * * . @weekly - Chạy nhiệm vụ được chỉ định mỗi tuần một lần vào nửa đêm vào Chủ nhật. Tương đương với 0 0 * * 0 . @daily - Chạy nhiệm vụ được chỉ định mỗi ngày một lần vào nửa đêm. Tương đương với 0 0 * * * . @hourly - Chạy tác vụ được chỉ định mỗi giờ một lần vào đầu giờ. Tương đương với 0 * * * * . @reboot - Chạy tác vụ được chỉ định khi khởi động hệ thống (thời gian khởi động).

Lệnh Crontab Linux

Lệnh crontab cho phép bạn cài đặt hoặc mở tệp crontab để chỉnh sửa.

Bạn có thể sử dụng lệnh crontab để xem, thêm, xóa hoặc sửa đổi các công việc cron bằng các tùy chọn sau:

  • crontab -e - Chỉnh sửa tập tin crontab hoặc tạo tập tin nếu nó chưa tồn tại. crontab -l - Hiển thị nội dung tập tin crontab. crontab -r - Xóa tệp crontab hiện tại của bạn. crontab -i - Xóa tệp crontab hiện tại của bạn bằng lời nhắc trước khi xóa. crontab -u - Chỉnh sửa tập tin crontab sử dụng khác. Yêu cầu đặc quyền quản trị hệ thống.

Lệnh crontab mở tệp crontab bằng trình chỉnh sửa được chỉ định bởi các biến môi trường VISUAL hoặc EDITOR .

Biến Crontab

Trình nền cron tự động đặt một số biến môi trường.

  • Đường dẫn mặc định được đặt thành PATH=/usr/bin:/bin . Nếu lệnh bạn đang gọi có mặt trong đường dẫn được chỉ định cron, bạn có thể sử dụng đường dẫn tuyệt đối cho lệnh hoặc thay đổi biến cron $PATH . Bạn không thể ngầm thêm :$PATH như bạn sẽ làm với một tập lệnh thông thường. Shell mặc định được đặt thành /bin/sh . Bạn có thể đặt một shell khác bằng cách thay đổi biến SHELL.Cron gọi lệnh từ thư mục chính của người dùng. Biến HOME có thể được ghi đè bằng cài đặt trong crontab. Thông báo email được gửi đến chủ sở hữu của crontab. Để ghi đè hành vi mặc định, bạn có thể sử dụng biến môi trường MAILTO với danh sách (được phân tách bằng dấu phẩy) của tất cả các địa chỉ email bạn muốn nhận thông báo email. Nếu MAILTO được xác định nhưng trống ( MAILTO="" ), không có thư nào được gửi.

Hạn chế Crontab

Quản trị viên hệ thống có thể kiểm soát người dùng nào có quyền truy cập vào lệnh crontab bằng cách sử dụng các tệp /etc/cron.allow /etc/cron.allow . Các tập tin bao gồm một danh sách tên người dùng, một tên người dùng trên mỗi dòng.

Theo mặc định, chỉ có tệp /etc/cron.deny tồn tại và trống, có nghĩa là tất cả người dùng có thể sử dụng lệnh crontab. Nếu bạn muốn từ chối quyền truy cập vào các lệnh crontab cho một người dùng cụ thể, hãy thêm tên người dùng vào tệp này.

Nếu tệp /etc/cron.allow chỉ tồn tại thì người dùng được liệt kê trong tệp này có thể sử dụng lệnh crontab .

Nếu không có tệp nào tồn tại, chỉ những người dùng có đặc quyền quản trị mới có thể sử dụng lệnh crontab .

Ví dụ về công việc định kỳ

Dưới đây là một số ví dụ về công việc định kỳ sẽ chỉ cho bạn cách lên lịch tác vụ để chạy trong các khoảng thời gian khác nhau.

  • Chạy một lệnh vào lúc 15:00 mỗi ngày từ thứ Hai đến thứ Sáu:

    0 15 * * 1-5 command

    Chạy một kịch bản cứ sau 5 phút và chuyển hướng đầu ra tiêu chuẩn thành dev null , chỉ có lỗi tiêu chuẩn sẽ được gửi đến địa chỉ email được chỉ định:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Chạy hai lệnh mỗi thứ Hai lúc 3 giờ chiều (sử dụng toán tử && giữa các lệnh):

    0 15 * * Mon command1 && command2

    Chạy một đoạn mã PHP cứ sau 2 phút và ghi đầu ra vào một tệp:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    Chạy một kịch bản mỗi ngày, mỗi giờ, vào giờ, từ 8 giờ sáng đến 4 giờ chiều:

    00 08-16 * * * /path/to/script.sh

    Chạy một kịch bản vào thứ Hai đầu tiên mỗi tháng, lúc 7 giờ sáng

    0 7 1-7 * 1 /path/to/script.sh

    Chạy một kịch bản lúc 9:15 tối, vào ngày 1 và 15 hàng tháng:

    15 9 1, 15 * * /path/to/script.sh

    Đặt các biến HOME , PATH , SHELL MAILTO tùy chỉnh và chạy lệnh mỗi phút.

    HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command

Phần kết luận

Bạn đã học cách tạo công việc định kỳ và lên lịch các nhiệm vụ vào một ngày và giờ cụ thể.

Hãy để lại nhận xét nếu bạn có bất kỳ câu hỏi nào.

thiết bị đầu cuối cronab