Yanıtlar:
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 +W
ondalı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: yourCommand
yalnı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)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
hafta 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.
test
bir kullanıcı değil, bir komut. Deneyin:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
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
echo $?
bu komutu çalıştırdıktan sonra, dönüş kodunu görmek için çalıştırın - bununla önemli olan