Cron untuk menjalankan setiap Rabu ke-2?

9

Saya perlu menemukan cara untuk mencatat suatu pekerjaan sehingga dapat berjalan setiap hari Rabu dalam sebulan. Apakah ini mungkin?


sumber
1
Pertanyaan ini terlihat memberikan jawaban yang sesuai.
scurker
1
Ya, tapi pertanyaan itu tentang Sel, bukan Rab;) Tapi jawaban yang diterima itu cerdas.
edoloughlin
>> Ya, tapi pertanyaan itu tentang Sel, bukan Rab;) Jawaban yang diterima adalah pintar, meskipun ... apa yang begitu sulit untuk mengubah Sel ke Rab?
ajreal
0 * * * 3 tes $ (tanggal \ +% u) -eq 3 && gema "mulai jalankan saya" coba ini. tidak menempel ke jawaban karena satu pertanyaan liner cukup samar.

Jawaban:

14

Halaman manual saya untuk crontab (yang sayangnya saya tidak dapat temukan online) memberikan contoh berikut:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

Menyesuaikan ini dengan tujuan Anda ...

0 4 8-14 * *    test $(date +\%u) -eq 3 && job.sh
Hasturkun
sumber
3
Bagi siapa pun yang ingin mengedit jawaban ini, alasan Anda tidak hanya menggunakan bidang hari dalam seminggu adalah bahwa jika hari baik bulan dan hari dalam seminggu dibatasi (yaitu, tidak *), perintah akan berjalan ketika salah satu cocok .
Hasturkun
1
Saya menemukan bahwa saya harus melarikan diri dari% u, jadi:date +\%u
Antony D'Andrea
3

Anda dapat menghindari menjalankan skrip eksternal dengan menggunakan kombinasi trik hari dalam seminggu ditambah hari kerja:

# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh

Ini juga menghindari menjalankan program eksternal lain. 8-14 memilih semua hari yang cocok dengan minggu kedua bulan itu. Kemudian itu disaring hanya pada hari Rabu itu.

Kyle Berger
sumber
1

Tidak mungkin menggunakan cron sendiri, tetapi Anda dapat memanggil skrip seminggu sekali yang melakukan pengujian:

Di crontab, jalankan second_wed.sh pukul 12.00 setiap hari Rabu:

0 12 * * 3 /home/you/bin/second_wed.sh

Di second_wed.sh:

#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
  # Call your program here instead of 'ls'…
  ls
fi
edoloughlin
sumber
1

Berdasarkan jawaban ini , Anda bisa melakukan:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh
Komunitas
sumber
1

Untuk server CentOS 7, sepertinya ini adalah sintaks yang berfungsi untuk saya. Harap perhatikan ruang di sekitar [dan ]. Butuh beberapa saat bagi saya untuk mencari tahu.

Ini menjalankan test.shfile pada 13:07 / 1:07 PM pada hari Rabu kedua bulan itu. (0 = Minggu, 1 = Senin, 2 = Selasa, 3 = Rabu, dll.)

07 13 8-14 * * [ `date +\%u` = 3 ] &&  /root/scripts/test.sh
eglescout
sumber