Tiếng Việt

Công cụ dành cho nhà phát triển · Trình tạo Crontab

Ví dụ về biểu thức cron: hàng giờ, hàng đêm, các ngày trong tuần, đầu tháng

· Cách thức hoạt động

cron ví dụ lập kế hoạch

Một số thẻ lịch trình năm ô được sắp xếp bên cạnh dấu đồng hồ và lịch
Hình minh họa vector ToolAcre gốc

Mười lịch trình bao gồm hầu hết các crontab thực. Bài đăng này đưa ra biểu thức cho từng trường, giải thích các trường và chỉ ra trường mà mọi người hầu như luôn mắc sai lầm.

Bạn cần 'ngày đầu tiên của tháng lúc 06:00' và kết quả tìm kiếm không đồng ý — một tập hợp các biểu thức đã được xác minh kèm theo lý do

Câu trả lời được sao chép cho “ngày đầu tiên của tháng lúc 06:00” chỉ hữu ích nếu mọi vị trí đều có thể được chứng minh. Theo thứ tự năm trường, `0 6 1 * *` có nghĩa là phút 0, giờ thứ sáu, ngày của tháng một, mọi tháng và mọi ngày trong tuần. Việc đọc các trường sẽ ngăn một ví dụ hấp dẫn trở thành một sự phụ thuộc sản xuất không giải thích được.

Các ví dụ ở đây nằm trong phạm vi ngữ pháp do trình phân tích cú pháp và kiểm tra của ToolAcre thực hiện. Chúng là những mảnh lịch trình, không phải là những định nghĩa công việc hoàn chỉnh. Trình duyệt có thể mô tả chúng và hiển thị các ứng cử viên đồng hồ treo tường trong tương lai trong vùng đã chọn, nhưng nó không biết lệnh, quyền hoặc máy chủ mà cuối cùng có thể sử dụng chúng.

Mỗi phút, mỗi 5 phút, mỗi giờ — * * * * *, */5 * * * * và 0 * * * * và tại sao 0 dẫn đầu lại quan trọng

`* * * * *` chọn giá trị từng phút của mỗi giờ và ngày. `*/5 * * * *` thu hẹp số phút thành 0, 5, 10, v.v. cho đến 55. `0 * * * *` chỉ chọn phút 0, tạo ra một ứng cử viên vào đầu mỗi giờ. Do đó, số 0 đứng đầu là sự khác biệt giữa vị trí 60 phút và một.

Tất cả ba biểu mẫu đều xuất hiện ở dạng đặt trước hoặc cú pháp đã được kiểm tra. Một bước mở rộng từ giới hạn dưới của trường phút, trong khi ký tự đại diện mở rộng mọi giá trị được phép từ 0 đến 59. Sử dụng bản xem trước để kiểm tra nghiêm ngặt các lần chạy sau đó; không suy luận rằng công cụ đã bắt đầu một quy trình định kỳ chỉ vì nó có thể liệt kê thời gian.

Mỗi ngày một lần và hai lần mỗi ngày — 30 2 * * * và 0 6,18 * * *

Lúc 02:30 hàng ngày là `30 2 * * *`: phút 30 và giờ 2 với các trường lịch không hạn chế. Hai lần mỗi ngày ở mức 06:00 và 18:00 là `0 6,18 * * *`; dấu phẩy kết hợp hai giá trị giờ trong khi phút vẫn cố định. Cả hai đều dễ xem lại hơn khi danh sách giờ rõ ràng thay vì trùng lặp thành hai dòng.

Múi giờ đã chọn sẽ thay đổi thời điểm được hiển thị cho cùng các trường đồng hồ treo tường. ToolAcre tính toán từng ứng cử viên là giờ tường địa phương trong vùng đó và bỏ qua giờ địa phương không tồn tại trong quá trình thay đổi đồng hồ chuyển tiếp. Hành vi xem trước đó thuộc về công cụ này; bài viết không khái quát nó thành lời hứa hẹn về mọi daemon.

Các ngày trong tuần và cuối tuần — 0 8 * * 1-5 và 0 10 * * 0,6, kèm theo cảnh báo đánh số ngày Chủ Nhật

Các ngày trong tuần tại 08:00 là `0 8 * * 1-5` và các buổi sáng cuối tuần tại 10:00 là `0 10 * * 0,6`. Trình phân tích cú pháp này chấp nhận Chủ nhật là 0 hoặc 7 và chuẩn hóa cả hai thành cùng một giá trị. Tên cũng được hỗ trợ nên `MON-FRI` có thể thay thế `1-5` mà không thay đổi các ngày trong tuần mở rộng.

Tránh thiết lập ngày trong tháng cùng lúc trừ khi muốn có một liên kết OR. `0 8 1 * 1-5` không có nghĩa là chỉ có ngày đầu tiên trong tuần. Nó bao gồm ngày đầu tiên của mỗi tháng cộng với mỗi ngày trong tuần. Trình tạo cảnh báo bất cứ khi nào cả hai trường ngày bị hạn chế và đặt “hoặc” vào câu kết quả.

Hàng tháng, hàng quý và hàng năm — 0 6 1 * *, 0 6 1 1,4,7,10 * và 0 0 1 1 *

Hàng tháng ở mức 06:00 vào ngày đầu tiên là `0 6 1 * *`. Hàng quý vào ngày đầu tiên của tháng 1, tháng 4, tháng 7 và tháng 10 là `0 6 1 1,4,7,10 *`. Chương trình chạy vào nửa đêm hàng năm vào tháng 1 1 là `0 0 1 1 *`, đây cũng là phần mở rộng được sử dụng bởi các bí danh `@yearly` và `@annually` được hỗ trợ.

Những ví dụ này sử dụng một ngày tồn tại trong mỗi tháng đã chọn. ToolAcre chấp nhận các kết hợp không thể là hợp pháp về mặt cú pháp nhưng cảnh báo khi, ví dụ: ngày 30 chỉ được ghép nối với tháng 2. Tháng 2 29 nhận được cảnh báo năm nhuận. Do đó, tính hợp lệ của lịch được hiển thị tách biệt với ngữ pháp của trường thay vì bị ẩn đằng sau một thông báo chung không hợp lệ.

Lập kế hoạch ngày cuối cùng không thể biểu thị được bằng các toán tử năm trường được hỗ trợ

Ngữ pháp được hỗ trợ không có toán tử ngày cuối cùng. `L` bị từ chối thay vì được dịch và ngày 31 không bao gồm các tháng có ba mươi ngày hoặc tháng Hai. Sổ làm việc đề xuất kiểm tra ngày tháng bên lệnh, nhưng kho lưu trữ này không thực thi hoặc xác minh lệnh, vì vậy bài viết không trình bày cách giải quyết đó như một tính năng của trình tạo được hỗ trợ.

Hãy coi “ngày cuối cùng của tháng” là một yêu cầu vượt quá ngôn ngữ diễn đạt này. Chọn một bộ lập kế hoạch hoặc chiến lược lệnh được ghi lại bởi mục tiêu thực tế và kiểm tra nó ở đó. ToolAcre vẫn hữu ích cho năm trường thông thường xung quanh quyết định đó, nhưng việc xác thực thành công không thể tạo ra toán tử mà trình phân tích cú pháp của nó không triển khai.

Các trường giây và toán tử nước ngoài bị trình phân tích cú pháp này từ chối

Biểu thức cổ điển trong lộ trình này không có vị trí giây hoặc năm. Sáu trường bị từ chối kèm theo hướng dẫn về kiểu lập lịch theo giây. Trình phân tích cú pháp cũng từ chối `?`, `#`, `L` và `W` vì trình đọc giá trị của nó chỉ chấp nhận số, chỉ hỗ trợ tên ba chữ cái, dải ô, dấu phẩy, dấu gạch chéo và ký tự đại diện.

Do đó, yêu cầu về phút phụ không thể được trình bày ở đây. Một biểu thức từ một bộ lập lịch khác cũng không thể được khai báo tương đương chỉ vì nó trông giống nhau. Đếm vị trí, kiểm tra sự hỗ trợ của người vận hành và xây dựng lại tập hợp dự định với ngữ pháp đích. Ngữ nghĩa bị bỏ qua sẽ vẫn là một khoảng trống rõ ràng, không phải là sự gần đúng ngẫu nhiên.

Bài học rút ra: xây dựng từ mười cái này - và sử dụng trình tạo Crontab để điều chỉnh một cái và đọc lại kết quả

Lịch trình chung trở nên an toàn hơn khi mỗi mã thông báo đều có lý do: ghim số 0 vào ranh giới, các lựa chọn thay thế tên bằng dấu phẩy, một phạm vi bao gồm cả hai đầu và một ngôi sao mở trường. Các cài đặt trước cung cấp một số điểm bắt đầu, bao gồm các biểu mẫu phút, quý, giờ, hàng ngày, các ngày trong tuần, Chủ Nhật, hàng tháng và hàng năm.

Điều chỉnh cài đặt trước gần nhất, đọc câu được tạo và quét năm lần tiếp theo trong vùng dự định của máy. Trình tự đó xác minh mục đích biểu thức trong khi vẫn tiếp tục triển khai bên ngoài trình duyệt. Một ví dụ điển hình không chỉ có sẵn bản sao; nó đủ nhỏ để người đánh giá khác có thể xây dựng lại lý do tại sao mọi trường đều ở đó.