Jawaban:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
: jumlah minggu tahun dengan Senin sebagai hari pertama dalam minggu, hari ini minggu ke 39
10#$(date +%W)
: konversikan date +W
ke angka desimal dan hindari kebingungan parsing dasar shell
$((39%2))
: operasi modulo: hasilnya 0 (angka minggu genap) atau 1 (angka minggu ganjil), hasil minggu ini adalah 1, minggu depan 0
test 1 -eq 1
: tes aritmatika (sama), dalam hal ini hasilnya adalah boolean true
&& yourCommand
: Boolean AND: jalankan yourCommand
hanya jika hasil dari perintah sebelumnya adalah boolean true
Perhatikan bahwa tahun ini bisa mendapatkan dua minggu ganjil: 53 (tahun ini) dan 1 (tahun depan)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
mencoba shell saya untuk mengeksekusi hasil perhitungan minggu: -bash: 1: command not found
. Adakah petunjuk mengapa ia melakukan itu? Terima kasih.
test
bukan pengguna, itu perintah. Coba:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Apa yang Anda tunjukkan adalah "setiap minggu". Maka kodenya adalah:
0 8 * * 6
Anda yakin perlu menjalankannya setiap dua minggu?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
setelah menjalankan perintah itu, untuk melihat kode kembalinya - itulah yang penting dengan itu