2016-09-05 27 views
12
benim sistemde aşağıdaki cron ifadeye sahip

:Arasında bir fark var mı? ve * cron ifadelerinde? Garip örnek

0 0 0/1 1/1 * ? * 

ve ne biliyor musunuz? Ne anlama geldiğini bilmiyorum. Yazan adam önümüzdeki 2 hafta boyunca onun tatilde olduğu için kendimi bulmalıyım. dokümantasyon Elimizdeki documentation göre

here bulunabilir:

* * * * * * * 
| | | | | | | 
| | | | | | +-- 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) 

Tamam, bana ne düşündüğümü söyleyeyim:

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 

Ancak mevcut: Ben ifadesi demek olduğuna inanıyoruz cron ifade monitörleri, her saat anlamına geliyor. Kıdemli Java Dev olduğunu yazmış biri olarak, onun yerine böyle bir ifade yazmak için herhangi bir neden biliyor olmalı:

0 0 * * * * * 

Biz org.springframework.scheduling.quartz.QuartzJobBean kullanın.

Eh Kısa özet, benim soru olduğunu düşünüyorum: 0 0 0/1 1/1 * ? * ve 0 0 * * * * * arasındaki fark nedir?

Düzenleme:

The documentation burada bulabilirsiniz. Her 1 saat
1/1 saat 0 başlar ve tekrar

+0

Bu ifade ne kadar zaman önce yazıldı? Belki de kuartzda – joc

+1

oluşturulduğu zaman izin verilen özel karakterlerde sınırlamalar vardı, ve uzunca bir gün önce, “Günün birinde ve günlerinde”? ”kullanılması gerekliliği görünüyordu:“ Her iki günü de belirtmek için destek ” hafta ve bir gün-ay değeri tamamlanmadı (şu anda bu alanlardan birinde '?' karakterini kullanmalısınız). ' – xenteros

+1

güzel yakalama !! Bunu bilmiyordum, ama 0 0 * * sorusunda belirttiğiniz gibi? * '0 0 0/1 1/1 * ile eşdeğer bir ifadedir? * IMO en azından şu anda – joc

cevap

12

0/1 vasıta

Yani bu model ayın günü bir başlangıç, bir kez cron'u her saat çalıştırır her 1 gün ay ilk güne başlamak ve yürütmek olduğunu ve her gün kendini tekrar ediyor.

orada dayOfWeek birine veya dayOfMonth yılında ? kullanmak için bir gerekliliktir: Günde-of-hafta ve bir gün içinde aylık değerini hem belirtmek için
Destek şu anda kullandığınız gerekir (tam değil Bu alanlardan birinde '?' karakteri). - xenteros 7 dakika önce

Ardından (siz yorum olarak zorunlu ? ile değil 0 0 * * * *,) 0 0 * * * ? * her saat ve her gün çalıştırır, saniye ve dakika görmezden ve diğer elementlerin her değerini alarak, aynı ifade olacaktır.


Bilgilerinizi göre:

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) 

Ve özel karakterlerin this explanation:

* (“bütün değerler”) içindeki tüm değerleri seçmek için kullanılır

bir alan. Örneğin, “” dakika alanındaki “* her dakika” anlamına gelir.

?

(“özel değer”)

karakter izin verilen iki alanlarından birine bir şey belirtmek gerektiğinde yararlıdır, ancak diğer değil. Örneğin, tetiğimin ayın belirli bir gününde (10'uncu günü) ateş etmesini istiyorsam, ancak haftanın hangi günü olursa olsun umurumda değilse, güne “10” koyardım. -günlük alanı ve haftanın günü alanında “?”.

/

artışlarını belirtmek için kullanılır. Örneğin, saniye alanında “0/15”, “0, 15, 30 ve 45 saniyeleri” anlamına gelir. Saniye alanında “5/15”, “saniye 5, 20, 35 ve 50” anlamına gelir. ‘’ Karakterinden sonra ‘/’ ifadesini de belirtebilirsiniz - bu durumda ‘’, ‘/’ den önce ‘0’ a eşittir. Ayın başında ‘1/3’, “ayın ilk günü başlayan her 3 günde bir yangın” anlamına gelir. Gördüğünüz gibi

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 , - */

: * ve ?

arasında


farklar her şeyden önce bu masada bir göz atın, ifadelerde ? ve * arasındaki farkı açıklamak ? yalnızca Day of month içinde izinli ve Day of week her iki alandan birinde zorunludur s ve bu değerin tanımlanmamış olduğunu söyleyecektir, bu nedenle, diğer alanı kullanın (?'u Day of month'a eklerseniz, kullanılan değer Day of week olacaktır).

+0

Tamam, cevabınız yararlıdır, ancak henüz sorumu cevaplamadığınız için henüz kabul etmeyeceğim. '' '' 'Üzerinden kullanmanın avantajı nedir? Bu cevabı bir veya iki gün içinde kabul edersem, eğer başka bir cevap yoksa, bu farkı gösterir. – xenteros

+3

iyi, aslında sorunuz * 0 0 0/1 1/1 * arasındaki fark nedir? * 've' 0 0 * * * * * '? * ancak fark'? 'HİÇBİR ÖZEL DEĞER anlamına gelir,' '' TÜM DEĞERLER – joc

+0

anlamına gelir Ben bu soruya bir ödül başladım. Cevabınızı geliştirmekten çekinmeyin. Şu anda bir hafta içinde en iyi cevap için +50 repu, ama daha fazla ödeyebilir miyim. – xenteros

2

0 0 * * * ? * ve farklı işaretleri analiz 0 0 0/1 1/1 * ? *

arasında hiçbir pratik fark yoktur:
0/1 ve saatlerce * - birinci araçlar saatte 0 hergün başlayıp her saat tekrarlamak, ikincisi gelir: her saat tekrarlamak Günler için
1/1 ve * - fisrt, ayın ilk gününden başlamak demektir ve her gün tekrar eder ve ikincisi her gün anlamına gelir.

Neden birinin karmaşık ifadeyi kullandığı, belki de test ederek, ifade bu formla değerlendirildiği ve bunu basitleştirmek için işe girmediği veya belki de önceki cron versiyonunun farklı çalıştığı nedenidir.

İlgili konular