Cronjob Cumartesi günü, bu cumartesi başlayarak her iki haftada bir


11

Bugün cuma, 3 Ekim 2014 03:58

Aşağıdaki tarihlerde çalıştırmak için böyle bir cronjob zamanlamak istiyorum:

  1. 4 Ekim 2014 Cumartesi 08:00
  2. 18 Ekim 2014 Cumartesi 08:00
  3. 1 Kasım 2014 Cumartesi 08:00 ... ...

Yani her 2 haftada bir, Cumartesi günü, saat 8'de.

Yanıtlar:


27
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

date +%W: haftanın ilk günü Pazartesi olan bugünkü hafta sayısı, bugün 39. hafta

10#$(date +%W): date +Wondalık sayıya dönüştür ve kabuk tabanı ayrıştırma karışıklığını önleme

$((39%2)): modulo işlemi: sonuç 0 (çift hafta sayısı) veya 1 (tek hafta sayısı), bu hafta sonuç 1, gelecek hafta 0

test 1 -eq 1: aritmetik test (eşit), bu durumda sonuç boolean true

&& yourCommand: Boolean AND: yourCommandyalnızca önceki komutun sonucu boolean true ise çalıştır

Yılın iki garip hafta alabileceğini unutmayın: 53 (bu yıl) ve 1 (gelecek yıl)


2
Zarif! Yine de, belirttiğiniz gibi, yılın 53. Cumartesi günü, her dört yüzyılda yaklaşık yetmiş yıl olacak bir köşe vakası var.
MadHatter

@Cyrus cevabınız için teşekkür eder, ancak * * * * 5 test yazarsam $ (($ (tarih +% W)% 2)) -eq 1 && /u02/restore/scripts/test.sh komut dosyası yazmaz ancak * * * * 5 /u02/restore/scripts/test.sh komut dosyası yazarsam çalışır. İfaden neden çalışmıyor? Sadece vakaları test ediyordum ve bunun bir şekilde çalışmadığını gördüm.
kupa

1
Benim hatam. Cron% 'i yeni satır olarak yorumlar. Cronjob'ınızda bir \ ile her iki% 'den kaçın:0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
Cyrus

Maalesef bu eski soruyu geri getirmek ama yürütmeye çalıştığınızda bu benim için çalışma değildi ve hiç $((10#$(date +%W)%2)) -eq 1 && echo OKhafta hesaplamanın sonucunu yürütmek için benim kabuk çalışır: -bash: 1: command not found. Bunu neden yaptýđýna dair bir ipucu var mý? Teşekkürler.
jhuet

3
@jhuet: testbir kullanıcı değil, bir komut. Deneyin:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Cyrus

4

Gösterdiğiniz şey "her hafta" dır. Sonra kod:

0 8 * * 6

İki haftada bir çalıştırmanız gerektiğinden emin misiniz?

0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand

1
Komutu açıklayabilir misiniz, lütfen
kupa

1
Cyrus'un verdiği şeyi kullanmak daha iyidir - $ (($ (tarih +% W)% 2)) "W" yılın bir hafta sayısını temsil eder. Sıfırdan 53'e kadar. Eğer ikiye bölünebilirse, o zaman "her saniye" haftanız. Yani cronjob her hafta çalışır, ancak 'expr' Komutunuzu yalnızca hafta sayısı 2'ye bölünebilirse komutunu yürütür.
Glueon

$ komutunu çalıştırdığımda (($ (tarih +% W)% 2)) -eq 1 komut satırında hiçbir şey döndürmüyor, neden?
kupa

1
sadece echo $?bu komutu çalıştırdıktan sonra, dönüş kodunu görmek için çalıştırın - bununla önemli olan
Ale
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.