Tiếng Việt

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

Cú pháp phạm vi và bước cron: */15, 1-5, danh sách và cách chúng kết hợp

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

cron lập kế hoạch developer-workflow

Các điểm phút được nhóm thành một phạm vi, một danh sách và một trình tự từng bước
Hình minh họa vector ToolAcre gốc

Các bước, phạm vi và danh sách là một phần của cú pháp cron mà mọi người sao chép mà không hiểu. Bài đăng này giải thích từng loài, cách chúng làm tổ và những điều ngạc nhiên như */7 không có nghĩa là 'bảy ngày một lần'.

Cứ 15 phút, nhưng chỉ 9 đến 5 — biểu cảm ngây thơ cũng bùng phát vào ban đêm

“Cứ mười lăm phút trong giờ hành chính” có hai hạn chế độc lập. Trường phút cần có dấu một phần tư giờ, trong khi trường giờ cần có khoảng giới hạn. Chỉ viết `*/15 * * * *` sẽ giải quyết được nửa đầu và vẫn tạo ra các lượt chạy suốt đêm. Biểu thức phải mã hóa cả hai ràng buộc trước khi nó nói bất cứ điều gì về các ngày trong tuần.

ToolAcre phân tích năm trường lịch trình chứ không phải lệnh. Bắt đầu với `*/15 9-17 * * 1-5`, sau đó kiểm tra câu và bản xem trước ở lần chạy tiếp theo. Việc kiểm tra đó phát hiện ra lỗi phổ biến khi đặt `9-17` ở vị trí phút hoặc để trường ngày trong tuần không bị hạn chế. Trình tạo tạo và giải thích một biểu thức; nó không cài đặt hoặc thực thi một công việc.

Phạm vi — 1-5 và 9-17 dưới dạng các phạm vi bao gồm trong một trường duy nhất

Dấu gạch nối tạo ra một phạm vi bao gồm bên trong một trường. `9-17` ở vị trí giờ mở rộng thành chín giá trị: 9 đến 17. Tương tự, `1-5` ở vị trí ngày trong tuần mở rộng từ Thứ Hai đến Thứ Sáu vì trình phân tích cú pháp này ánh xạ Chủ Nhật tới 0, Thứ Hai đến 1, v.v. Cả hai điểm cuối đều tham gia nên 17:00 nằm trong phạm vi giờ đã chọn.

Phạm vi không thể bao trùm qua ranh giới trường. Trình phân tích cú pháp từ chối một dạng ngược như `17-9` và đề xuất chia các giá trị mong muốn thành hai mục danh sách. Việc từ chối đó rất hữu ích vì các quy tắc gói khác nhau giữa các sản phẩm lập kế hoạch. Ở đây, một phạm vi luôn di chuyển lên trên giữa các giá trị đã đáp ứng giới hạn số hoặc tên được chấp nhận của trường.

Các bước — */15 và 9-17/2, và lý do bước này khởi động lại ở giới hạn dưới của trường thay vì đếm liên tục

Dấu gạch chéo chọn mọi giá trị thứ n từ điểm bắt đầu. `*/15` trong trường phút bắt đầu ở mức tối thiểu, bằng 0 và mở rộng thành 0, 15, 30 và 45. `9-17/2` bắt đầu ở 9 và mang lại 9, 11, 13, 15 và 17. Bước này thuộc về một trường; nó không tính số phút trôi qua theo ranh giới giờ.

Trình phân tích cú pháp cũng chấp nhận khởi đầu đơn giản bằng một bước. `5/15` trong trường phút có nghĩa là 5, 20, 35 và 50 vì điểm cuối phía trên ngầm định là 59. Các bước phải là số nguyên dương và không thể vượt quá kích thước của phạm vi đầy đủ của trường. Bước 0, không phải số hoặc quá lớn sẽ nhận được lỗi xác thực theo từng trường cụ thể thay vì diễn giải theo dự đoán.

Danh sách có thể kết hợp các giá trị, phạm vi và phạm vi bước trong một trường

Dấu phẩy hợp nhất một số phần trong cùng một lĩnh vực. `1,15,30` đơn giản đặt tên cho ba giá trị phút. Dữ liệu đầu vào phức tạp hơn có thể kết hợp một giá trị đơn lẻ, một phạm vi bao hàm và một phạm vi bậc thang: `0,10-20/5,59` được kiểm tra mở rộng thành 0, 10, 15, 20 và 59. Các kết quả trùng lặp sẽ bị loại bỏ và các giá trị mở rộng được sắp xếp trước khi các phép tính sau này sử dụng chúng.

Ngữ pháp này có cấu trúc nhưng vẫn còn hẹp. Mỗi mục dấu phẩy có thể chứa một dấu gạch chéo và một phạm vi phải có chính xác hai điểm cuối không trống. Dấu phẩy lạc, nhiều dấu gạch chéo hoặc phạm vi chưa hoàn thành sẽ bị từ chối với lý do đặt tên trường. Điều đó làm cho một biểu thức hỗn hợp có thể xem lại được mà không giả vờ dấu câu sai định dạng có ý nghĩa thông thường.

Ví dụ đã hoạt động: */15 9-17 * * 1-5 — liệt kê số phút nó tạo ra và trường hợp cạnh 17:45

Đối với `*/15 9-17 * * 1-5`, giá trị phút là 00, 15, 30 và 45; giờ là 09 đến 17; và các giá trị ngày trong tuần là từ thứ Hai đến thứ Sáu. Vào mỗi ngày trong tuần được đưa vào, ứng cử viên đầu tiên là 09:00 và ứng cử viên cuối cùng là 17:45. Không có 18:00 vì 18 nằm ngoài phạm vi giờ.

Cạnh chạy cuối cùng minh họa lý do tại sao việc mở rộng trường lại đánh bại tốc ký đàm thoại. “Chín đến năm” có thể có nghĩa là dừng ở 17:00 đối với một độc giả và thêm toàn bộ thời gian năm giờ cho một độc giả khác. Trường giờ của Cron chọn một nhóm giờ, sau đó trường phút sẽ chọn các vị trí bên trong đó. Nếu 17:45 không được mong muốn thì ranh giới mong muốn cần có biểu thức hoặc logic phía lệnh khác.

Bước ngày trong tháng mở rộng từ ngày 1 mỗi tháng; nó không phải là khoảng thời gian một tuần trôi qua

`*/7` trong ngày trong tháng mở rộng từ mức tối thiểu 1 của trường đó, tạo ra 1, 8, 15, 22 và 29 nơi những ngày đó tồn tại. Khi tháng tiếp theo bắt đầu, trường lại bắt đầu ở 1. Do đó, nó mô tả các ngày theo lịch đã chọn chứ không phải khoảng thời gian bảy ngày liên tục tăng lên. Tháng Hai và những tháng ngắn hơn đơn giản là thiếu một số ngày cao điểm.

Cú pháp tương tự có giá trị bắt đầu khác trong trường khác. `*/7` phút bắt đầu lúc 0, trong khi `*/7` ngày trong tháng bắt đầu lúc 1. Trình phân tích cú pháp của ToolAcre lấy chuỗi từ từng thông số trường và bản xem trước của nó sẽ tìm kiếm ngày theo lịch. Đối với nhịp thực tế hàng tuần, hãy hạn chế số ngày trong tuần thay vì coi bước số ngày trong tháng là khoảng thời gian đã trôi qua.

Các toán tử không được hỗ trợ sẽ bị từ chối thay vì được hiểu là một phương ngữ cron khác

Trình phân tích cú pháp năm trường này không triển khai `L`, `W`, `#` hoặc `?`. Những ký tự đó không bị loại bỏ một cách âm thầm và không được trình bày dưới dạng cú pháp crontab di động. Sáu trường cũng bị từ chối, với lời giải thích rằng vị trí dẫn đầu bổ sung thuộc về kiểu lập lịch theo giây chứ không phải định dạng mà tuyến đường này đọc.

Ranh giới là có chủ ý: phút, giờ, ngày trong tháng, tháng và ngày trong tuần là ngữ pháp vị trí hoàn chỉnh ở đây. Trước khi di chuyển một biểu thức từ một bộ lập lịch khác, hãy đếm các trường của nó và xác định các toán tử của nó. Trình tạo có thể xác thực phương ngữ của chính nó; nó không thể chứng nhận Quartz, cú pháp lịch hệ thống hoặc biến thể của dịch vụ đám mây.

Bài học rút ra: các bước có nghĩa là 'bắt đầu từ cuối phạm vi' — và trình tạo giải thích biểu thức bước bằng những từ mà bạn có thể kiểm tra

Các phạm vi xác định một khoảng bao gồm, các phần hợp nhất bằng dấu phẩy và gạch chéo các giá trị mẫu từ phần bắt đầu của một trường cụ thể. Việc đọc các thao tác đó theo thứ tự đó sẽ biến mã thông báo dày đặc thành một tập hợp hữu hạn có thể được kiểm tra. Nó cũng giải thích các khía cạnh như 17:45 mà không dựa vào cụm từ được sao chép mà tác giả có thể có ý gì khác.

Sử dụng trình tạo làm bề mặt đánh giá: nhập biểu thức, đọc mô tả, kiểm tra các cảnh báo và so sánh năm lần chạy đồng hồ treo tường tiếp theo trong vùng dự định. Sau đó đặt năm trường đã được xác minh bên cạnh lệnh thực trong môi trường của riêng bạn. Tiến độ xây dựng và thực hiện công việc vẫn có trách nhiệm riêng biệt.