Itu elegan! Masih, seperti yang telah Anda catat, memiliki sudut pada Sabtu ke-53 tahun ini, yang akan terjadi kira-kira tujuh puluh tahun dalam setiap empat abad.
MadHatter
@Cyrus terima kasih atas jawaban Anda, tetapi jika saya menulis * * * * 5 tes $ (($ (tanggal +% W)% 2)) -eq 1 && /u02/restore/scripts/test.sh skrip tidak jalankan tetapi jika saya menulis skrip * * * * 5 /u02/restore/scripts/test.sh dijalankan. mengapa ekspresimu tidak berfungsi? Saya hanya menguji kasus-kasus itu. Dan ternyata tidak berhasil.
kupa
1
Kesalahanku. Cron mengartikan% sebagai baris baru. Lepaskan kedua% dengan \ di cronjob Anda:0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
Cyrus
Maaf untuk membawa kembali pertanyaan lama ini tapi itu tidak bekerja untuk saya dan ketika saya mencoba untuk mengeksekusi $((10#$(date +%W)%2)) -eq 1 && echo OKmencoba shell saya untuk mengeksekusi hasil perhitungan minggu: -bash: 1: command not found. Adakah petunjuk mengapa ia melakukan itu? Terima kasih.
jhuet
3
@ jhuet: testbukan pengguna, itu perintah. Coba:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Cyrus
4
Apa yang Anda tunjukkan adalah "setiap minggu". Maka kodenya adalah:
0 8 * * 6
Anda yakin perlu menjalankannya setiap dua minggu?
Lebih baik menggunakan apa yang Cyrus berikan - $ (($ (tanggal +% W)% 2)) "W" adalah nomor minggu dalam setahun. Mulai dari nol hingga 53. Jika bisa dibagi dua, maka itu adalah minggu "setiap detik" Anda. Jadi cronjob berjalan setiap minggu tetapi 'expr' mengeksekusi perintah yourCommand hanya jika angka minggu dapat dibagi dengan 2.
Glueon
ketika saya menjalankan tes $ (($ (tanggal +% W)% 2)) -eq 1 pada baris perintah tidak menghasilkan apa-apa, mengapa?
kupa
1
jalankan saja echo $?setelah menjalankan perintah itu, untuk melihat kode kembalinya - itulah yang penting dengan itu
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:
Anda yakin perlu menjalankannya setiap dua minggu?
sumber
echo $?
setelah menjalankan perintah itu, untuk melihat kode kembalinya - itulah yang penting dengan itu