2016-09-05 21 views
12

Tôi có biểu thức cron sau trong hệ thống của mình:Có sự khác biệt nào không? và * trong các biểu thức cron? Ví dụ lạ

0 0 0/1 1/1 * ? * 

và bạn biết không? Tôi chẳng biết nó có nghĩa là gì. Anh chàng đã viết nó vào kỳ nghỉ của mình trong 2 tuần tới vì vậy tôi phải tự mình tìm ra. Các tài liệu có thể được tìm thấy here

Theo documentation ta có:

* * * * * * * 
| | | | | | | 
| | | | | | +-- Year    (range: 1970-2099) 
| | | | | +---- Day of the Week (range: 1-7 or SUN-SAT) 
| | | | +------ Month of the Year (range: 0-11 or JAN-DEC) 
| | | +-------- Day of the Month (range: 1-31) 
| | +---------- Hour    (range: 0-23) 
| +------------ Minute   (range: 0-59) 
+-------------- Second   (range: 0-59) 

Ok, hãy để tôi nói cho bạn biết những gì tôi nghĩ: Tôi tin rằng biểu thức có nghĩa là:

start when: 
    seconds:  0 
    minutes:  0 
    hours:   0 
    dayOfMonth  1 
    monthOfYear  any 
    dayOfWeek  any 
    year   any 

run every: 
    1    hour 
    1    dayOfWeek 
when: 
    dayOfWeek same as on first execution 

Tuy nhiên có sẵn cron biểu hiện màn hình nói rằng nó chỉ đơn giản có nghĩa là mỗi giờ. Là một trong những người đã viết rằng là Senior Java Dev, ông hẳn phải biết lý do nào đó để viết các biểu hiện như vậy thay vì:

0 0 * * * * * 

Chúng tôi sử dụng org.springframework.scheduling.quartz.QuartzJobBean.

tóm tắt ngắn

Vâng, tôi nghĩ rằng câu hỏi của tôi là: sự khác biệt giữa 0 0 0/1 1/1 * ? *0 0 * * * * * là gì?

Edit:

The documentation có thể được tìm thấy ở đây.

+0

biểu thức này được viết bao nhiêu lần trước đây? có thể có những hạn chế trong các ký tự đặc biệt được phép trong thạch anh khi nó được tạo ra từ – joc

+1

@joc từ lâu, và có vẻ như, có một yêu cầu để sử dụng '?' trong một ngàyOfWeek và dayOfMonth: 'Hỗ trợ cho việc xác định cả ngày tuần và giá trị theo ngày không hoàn thành (hiện tại bạn phải sử dụng ký tự '?' trong một trong các trường này). ' – xenteros

+1

nice catch !! Tôi không biết điều đó, nhưng như bạn đã nói trong câu hỏi '0 0 * *? * 'là một biểu thức tương đương với' 0 0 0/1 1/1 *? * 'IMO ít nhất là ngày nay – joc

Trả lời

12

0/1 phương tiện bắt đầu từ giờ 0 và lặp lại mỗi 1 giờ
1/1 là bắt đầu ngày đầu tiên của tháng và thực hiện mỗi 1 ngày

Vì vậy, mô hình này thực thi cron một lần mỗi giờ, bắt đầu từ ngày đầu tiên của tháng và lặp lại chính nó mỗi ngày.

có nhu cầu sử dụng ? ở một trong dayOfWeek hoặc dayOfMonth:
Hỗ trợ để xác định cả một tuần ngày-of-và một giá trị ngày trong tháng là không đầy đủ (hiện tại bạn phải sử dụng '?' ký tự trong một trong các trường này). - xenteros 7 mins ago

Sau đó, 0 0 * * * ? * (và không 0 0 * * * *, với ? bắt buộc như bạn nhận xét) sẽ cùng biểu hiện, bỏ qua giây phút và uống mỗi giá trị của các yếu tố khác, sẽ thực hiện mỗi giờ và mỗi ngày.


Theo thông tin của bạn:

0 0 0/1 1/1 * ? * 
| | | | | | | 
| | | | | | +-- Year    (range: 1970-2099) 
| | | | | +---- Day of the Week (range: 1-7 or SUN-SAT) 
| | | | +------ Month of the Year (range: 0-11 or JAN-DEC) 
| | | +--------- Day of the Month (range: 1-31) 
| | +------------- Hour    (range: 0-23) 
| +---------------- Minute   (range: 0-59) 
+------------------ Second   (range: 0-59) 

this explanation trong những nhân vật đặc biệt:

* (“tất cả các giá trị”)

sử dụng để chọn tất cả các giá trị trong vòng một trường. Ví dụ: “” trong trường phút có nghĩa là “mỗi phút”.

? (“không có giá trị cụ thể”)

hữu ích khi bạn cần phải xác định một cái gì đó theo một trong hai lĩnh vực trong đó nhân vật được cho phép, nhưng không phải là khác. Ví dụ: nếu tôi muốn kích hoạt của tôi kích hoạt vào một ngày cụ thể trong tháng (ví dụ: ngày 10), nhưng không quan tâm ngày nào trong tuần xảy ra, tôi sẽ đặt “10” vào ngày trong trường -month và “?” trong trường ngày trong tuần.

/

dùng để xác định từng bước. Ví dụ: “0/15” trong trường giây có nghĩa là “giây 0, 15, 30 và 45”. Và “5/15” trong trường giây có nghĩa là “giây 5, 20, 35 và 50”. Bạn cũng có thể chỉ định ‘/’ sau ký tự ‘’ - trong trường hợp này ‘’ tương đương với ‘0’ trước ‘/’. '1/3' trong trường ngày của tháng có nghĩa là "cháy mỗi 3 ngày bắt đầu vào ngày đầu tiên của tháng".


khác biệt giữa *?

Để giải thích sự khác biệt giữa ?* trong các biểu thức, trước hết hãy nhìn vào bảng này:

Field Name  Mandatory Allowed Values  Allowed Special Characters 
Seconds   YES   0-59    , - */
Minutes   YES   0-59    , - */
Hours   YES   0-23    , - */
Day of month YES   1-31    , - * ?/L W //allowed '?' 
Month   YES   1-12 or JAN-DEC  , - */
Day of week  YES   1-7 or SUN-SAT  , - * ?/L # //allowed '?' 
Year   NO   empty, 1970-2099 , - */

Như bạn có thể nhìn thấy ? chỉ được phép trong Day of monthDay of week là bắt buộc trong một trong cả hai trường s và sẽ cho Quartz biết giá trị này chưa được xác định, do đó, sử dụng trường khác (nếu bạn đặt ? vào Day of month, giá trị được sử dụng sẽ là Day of week).

+0

Ok, câu trả lời của bạn là hữu ích, tuy nhiên tôi sẽ không chấp nhận nó, vì bạn chưa trả lời trực tiếp câu hỏi của tôi. Lợi thế của việc sử dụng '?' Trên '*' là gì? Tôi sẽ chấp nhận câu trả lời này trong một hoặc hai ngày nếu không có câu trả lời nào khác để chỉ ra sự khác biệt. – xenteros

+3

tốt, thực sự câu hỏi của bạn là * sự khác biệt giữa '0 0 0/1 1/1 * là gì? * 'và' 0 0 * * * * * '? * nhưng sự khác biệt là'? 'có nghĩa là KHÔNG CÓ GIÁ TRỊ CỤ THỂ,' * 'có nghĩa là TẤT CẢ GIÁ TRỊ – joc

+0

Tôi bắt đầu một tiền thưởng cho câu hỏi này. Vui lòng cải thiện câu trả lời của bạn. Hiện tại, nó là +50 repu cho câu trả lời tốt nhất trong một tuần, nhưng nếu tôi có thể trao giải nhiều hơn. – xenteros

2

Không có sự khác biệt thực tiễn giữa 0 0 * * * ? *0 0 0/1 1/1 * ? *

Phân tích điểm khác nhau:
0/1* trong nhiều giờ - phương tiện đầu tiên bắt đầu từ giờ 0 mỗi ngày và lặp lại mỗi giờ, thứ hai có nghĩa là: lặp lại mỗi giờ
1/1* cho ngày - fisrt có nghĩa là bắt đầu từ ngày đầu tiên của tháng và lặp lại hàng ngày và ngày thứ hai có nghĩa là mỗi ngày.

Lý do tại sao một người nào đó sử dụng biểu thức phức tạp có thể là bằng cách kiểm tra, biểu thức được đánh giá theo biểu mẫu này và không ai thực hiện công việc để đơn giản hóa hoặc phiên bản cron trước đó hoạt động khác.

Các vấn đề liên quan