CronJob setiap 25 menit

13

Saya ingin tahu apakah ada cara yang lebih mudah untuk menjalankan pekerjaan setiap 25 menit. Di cronjob, jika Anda menentukan parameter menit sebagai * / 25, itu akan berjalan hanya pada menit ke-25 dan ke-50 setiap jam

Pappu
sumber

Jawaban:

15

Perintah di crontab dijalankan dengan /bin/shsehingga Anda dapat menggunakan ekspansi aritmatika untuk menghitung apakah modulo menit saat ini sama dengan nol:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronakan menjalankan seluruh entri ini setiap 5 menit, tetapi hanya jika menit saat ini (dalam menit sejak zaman) modulo 25 sama dengan nol akan berjalan your_command.

Seperti yang telah ditunjukkan orang lain, 1 hari tidak habis dibagi 25 menit, jadi ini tidak akan menyebabkan your_commandberjalan pada waktu yang sama setiap hari, tetapi akan berjalan setiap 25 menit.

camh
sumber
cukup ramah ...
Tomas
Perhatikan bahwa dengan implementasi cron dari ISC setidaknya Anda harus melepaskan% karakter tersebut dengan backslash.
Stéphane Chazelas
@ StéphaneChazelas, poin bagus. Saya pergi ke depan dan menambahkan garis miring terbalik sebelum tanda persen karena setahu saya setiap implementasi cron memerlukan ini.
CODE-REaD
7

Taruhan terbaik Anda adalah berjalan pada 20 menit atau 30 menit.

Berikutnya Anda mungkin memicu setiap 5 menit, dan kemudian menghitung jumlah internal atau timestamp, dan menjalankan setiap pemicu 5, atau jika 25 menit telah berlalu sejak menjalankan terakhir.

Yang lebih rumit adalah menentukan waktu yang tepat untuk sehari, mulai dari tengah malam, dan menerima kesalahan di akhir hari. Ini akan melibatkan duplikasi entri crontab ke jam yang berbeda.

Lebih rumit dari itu adalah untuk menghitung waktu selama satu bulan penuh, yang akan melibatkan banyak salinan entri crontab untuk mencakup berbagai kombinasi.

Akhirnya Anda bisa menerapkan sendiri selalu pada daemon, dan minta agar melakukan penjadwalan.

Douglas Leeder
sumber
6

Saya tidak punya pengalaman langsung dengan itu, tetapi fcron tampaknya melakukan apa yang Anda inginkan di luar kotak. Menurut dokumentasinya, Anda dapat menentukan frekuensi:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh
che2cbs
sumber
Di mana Anda melihat 25 menit di sini?
Philomath
Menggunakan fcron dan @ 25 commandharus melakukan trik.
Caleb
Terima kasih Caleb. Seharusnya saya membuat contoh khusus alih-alih mengangkat satu langsung dari dokumentasi.
che2cbs
2

Izinkan saya menjelaskan secara singkat apa masalahnya di sini. Memasukkan 25 dalam bidang menit menyebabkan cronuntuk mengeksekusi ketika menit waktu saat ini sama dengan 25, yaitu satu jam sekali. Anda dapat memasukkan daftar kecocokan, masalahnya adalah 60 (menit dalam satu jam) tidak dapat dibagi dengan 25, jadi Anda perlu menambahkan beberapa entri berdasarkan jam. Kelipatan paling tidak umum dari 60 & 25 adalah 300, yaitu 5 * 60. jadi Anda harus menggilir 5 jam sampai kembali ke awal semula. sebagai contoh:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Tapi di sini lagi, 24 (jam sehari) tidak dapat dibagi dengan 5, kelipatan paling umum dari 5 & 24 hanyalah 5 * 24 = 120. & seterusnya dan seterusnya ...

Philomath
sumber
Mungkin jawabannya seharusnya komentar di pertanyaan awal.
Philomath
1

Anda dapat bermain dengan waktu modifikasi terakhir file

  • Buat skrip kecil (misalnya /usr/local/bin/age) yang akan menampilkan usia file:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Crontab Anda akan terlihat seperti ini (dengan asumsi 25 menit sama dengan 1500 detik jika saya benar)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Perhatikan bahwa saya menggunakan /var/tmpbukan /tmpkarena menurut FHS itu tidak seharusnya dihapus pada sistem shutdown / startup.

SamK
sumber
-2

Saya pikir yang berikut ini harus bekerja 0 0/25 * * *?


sumber
Sesuai pengetahuan saya, ini akan bekerja untuk setiap menit.
Itu akan dilaksanakan pada jam sekali setiap ... 25 jam? 0/25 ... bahkan tidak yakin apa yang dilakukannya tetapi bukan apa yang diinginkan OP.
Caleb