it-swarm-tr.com

Cron'a her gün bir komut çalıştırmasını nasıl söyleyebilirim (tek / çift)

"Ayın Günü" alanını kullanarak cron'u her gün bir komut çalıştıracak şekilde yapılandırırken, şöyle:

1 22 */2 * * COMMAND

ayın her garip olduğu zaman çalışır: 1,3,5,7,9 vb.

Cron'u 2,6,8,10 ve benzeri gibi günlerde çalışacak şekilde nasıl yapılandırabilirim?

46
freddie

Denediğiniz sözdizimi aslında belirsiz. Ay içinde kaç gün olduğuna bağlı olarak, bazı aylar tek günlerde ve bazı günlerde de çalışır. Bunun nedeni, hesaplanma şeklinin toplam olasılık sayısını alması ve böler olmasıdır. Gün aralığını manuel olarak belirterek ve tek veya çift gün kullanarak bu öfke davranışını geçersiz kılabilirsiniz. Gündüz senaryoları bile 31'inci uzun günlerde asla çalışmayacağından, 30 gün boyunca günler için temel olarak hiçbir şeyi kaybetmezsiniz ve özellikle 31 gün varmış gibi bölmek için özel olarak belirleyerek tuhaflaştırabilirsiniz günlük icra.

Sözdizimi şöyle görünecektir:

# Will only run on odd days:
0 0 1-31/2 * * command

# Will only run on even days:
0 0 2-30/2 * * command

Aynı sayıda güne sahip olmayan aylarla ilgili endişeniz burada önemli değil, çünkü ayların bundan daha fazla günü yok ve Şubat ayının zayıf olması için, tarih aralığı son veya iki günle hiç eşleşmeyecek, ancak zarar vermeyecek listelenmesini sağlayın.

Bu yaklaşım için tek 'gotcha', tek bir gün döngüsünde iseniz, 31 günlük ayları takip ederek, komutunuzun ayın ilkinde de çalışacağıdır. Benzer şekilde, eşit bir döngüyü zorluyorsanız, her bir sıçrama yılı Şubat sonunda üç günlük bir döngüye neden olur. Gerçekten "her gün" herhangi bir düzenli desen her ay eşit veya tek gün düşmeyecek gerçeği etrafında alamazsınız ve bunu zorlamak herhangi bir şekilde ya ekstra bir koşu olacak veya arasında bir çalışma eksik olacak ay sayısı eşleşmeyen gün sayımları.

64
Caleb

Bence bir olasılık yılın gibi bir gün kullanıyor:

# for odd days
test $(((`date +%j` % 2))) != 0 && command

# for even days
test $(((`date +%j` % 2))) == 0 && command

Unix ve Linux sistemleri için test edilmiştir.

2
Jordi

Genel olarak, her gün çalıştırır ve komut dosyasının bugün çalıştırılması gerekip gerekmediğini belirlemek için mantığı kullanmasını isterim.

Basit bir durum dosyası son çalıştırıldığında anlatmak ve daha sonra karşılaştırmak çok kolay olurdu.

Farklı kaynaklardan çalıştırılması gerekiyorsa, bağımsız değişkene bağımlı hale getirin.

1
Klas Mattsson

Her gün "diğer" olup olmadığını kontrol edelim :-) (bc program gerekli)

0 0 * * * test $(echo `date +%s` / 86400 % 2 == 0 |bc) -eq 0 && command

(Kodun doğru göründüğünden emin değilim. date +%s parçası kesme işaretleri arasında.)

1
user37264