Bisakah saya membuat cron "acak"?

12

Mungkin saya benar-benar gila, dan jika demikian - tidak apa-apa. Tapi bagaimana cara saya menjadwalkan pekerjaan untuk menyiarkan pesan acak, seperti dari jadwal fortune?

klarifikasi
ya - ini adalah stasiun kerja pribadi saya - tidak berencana untuk melakukan sesuatu yang miring pada server produksi :)

warren
sumber

Jawaban:

12

atmemiliki antarmuka yang lebih sederhana untuk jenis tujuan ini jika atdiinstal, mesin sedang berjalanatd dan pengguna diizinkan untuk menggunakan perintah.

Misalnya (periksa sintaks yang tepat menggunakan man atatauinfo at ),

at -f mengajukan now + 53 minutes

atau

at -f mengajukan now + 2 hours

akan menjalankan perintah dalam file yang ditentukan dalam 53 menit atau 2 jam, masing-masing.

at kemudian dapat dijalankan kembali pada awal pekerjaan yang dijadwalkan dengan memulai, menghitung, dan unit waktu yang sesuai (acak atau sebaliknya).

Edit

Seperti yang ditunjukkan Arjan di bawah ini, jika Anda menggunakan ini selain aplikasi mainan, Anda perlu memikirkan masalah seperti apa yang terjadi

  1. jika proses selanjutnya dimulai sebelum yang sebelumnya selesai (mis. apakah skrip masuk kembali?) atau

  2. jika gagal menjalankan dengan benar atau

  3. jika proses berikutnya gagal untuk memulai sama sekali atau tepat waktu (mis. apa yang terjadi jika mesin mati ketika proses berikutnya akan dimulai) dan

  4. tentang pencatatan dan pelaporan proses yang gagal atau berhasil.

mas
sumber
itu pendekatan yang belum saya pertimbangkan - dan bisa dibuat rekursif, jika fileberisi proses selanjutnya at, benar?
warren
Hebat - hanya mencobanya, dan bekerja hebat :)
warren
2
+1, tetapi beberapa hal yang perlu dipertimbangkan: jika at-command adalah baris pertama, dan jika skrip berjalan untuk waktu yang lama (atau jika intervalnya pendek), maka waspadalah menjalankan beberapa instance secara bersamaan. Tetapi ketika atberada di baris terakhir skrip, maka jelas tidak ada penjadwalan ulang yang akan dilakukan jika skrip gagal. Juga, menjalankan skrip dari baris perintah akan membuatnya (kembali) menjadwalkan dirinya juga (dan: beberapa jadwal kemudian bisa ada secara bersamaan). Dan cronmendukung pengiriman kesalahan (atau: keluaran secara umum) melalui email; Saya tidak tahu apakah atada yang seperti itu juga?
Arjan
@Arjan - Saya tidak terlalu khawatir tentang gagal dan tidak mengirim saya email .. karena (pada titik ini) saya hanya menggunakannya untuk bersenang-senang di workstation saya :) ..tapi - itu adalah sesuatu untuk dipikirkan jika ini diperluas untuk, katakanlah, pemeriksaan acak untuk intrusi
warren
script saya membayangkan tidak akan peduli berapa banyak salinan itu sendiri berjalan sekaligus
warren
13

Saya memiliki banyak perintah di / etc / crontab melakukan segala macam hal dan beberapa membutuhkan ketelitian dalam hitungan detik. Sekarang cron dapat memiliki resolusi yang lebih baik sambil menjaga semua waktu terlihat dan terpusat.

Contoh ini membuat dan mem-parsing halaman web antara 10 dan 50 detik sebelum setiap 5 menit:

4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch

Itu tidak harus memiliki waktu yang tepat karena data bergerak lambat, tetapi membantu menjaga waktu eksekusi munin-node serendah mungkin dengan tidak harus menunggu halaman web. (Plugin ini selanjutnya menyimpan cache halaman selama 30 menit untuk mengurangi klik yang tidak perlu, tetapi perlu memperbarui database setiap 5 menit).

Perhatikan \% - pengganti cron% untuk "\ n" - berguna untuk menyimpan teks email pada satu baris.

Andy Lee Robinson
sumber
jika Anda melakukan caching laman web, Anda tidak harus mendapatkan hasil pemuatan yang akurat
warren
1
ya, saya tahu - 'data bergerak lambat' - plugin mendapat nilai tukar mata uang dari suatu situs dan saya tidak ingin diblokir. (Saya bukan pedagang tetapi saya menghabiskan banyak waktu untuk menonton grafik munin) Saya membuat plugin serupa untuk cuaca lokal. Aplikasi tanpa akhir!
Andy Lee Robinson
1
aha! .. pendekatan yang sangat keren :)
warren
6

Secara internal cron, saya tidak berpikir fitur seperti itu ada. Saya pikir solusi terbaik adalah dengan menempatkan perintah Anda ke skrip shell, dan menempatkan sleepinterval acak di bagian atas skrip dan menggunakan $RANDOMvariabel. Kemudian jalankan skrip sekali sehari dalam pekerjaan cron biasa.

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2
John T
sumber
1
sleep () adalah jaminan yang hampir akan dibunuh oleh penyedia layanan. Kecuali tentu saja, dia ADALAH penyedia layanan.
A Dwarf
1
Saya berasumsi itu pada mesin Linux sendiri atau sesuatu jika dia menghadirkan keberuntungan secara acak kepada seseorang
John T
yah, itu benar.
A Dwarf
Mengapa tidur adalah ide yang buruk? Hanya bertanya ...
Tadeusz A. Kadłubowski
mengklarifikasi pertanyaan untuk @John T
warren
6

Ini akan tergantung pada jenis interval apa yang Anda cari. tetapi mari kita asumsikan Anda ingin skrip berjalan secara acak dengan probabilitas 1:30 (sekali setiap 30 menit)

  • Buat skrip cron Anda untuk peridiocity, katakan 10 menit. Ini akan menyala 3 kali setiap 30 menit.

  • Di dalam skrip gunakan rand sebagai syarat untuk pernyataan if . Anda ingin rand mengembalikan angka antara 0 dan 2. Jika 0, jalankan isi pernyataan if.

Pada dasarnya skrip Anda selalu menyala pada interval yang ditentukan. Tetapi hanya akan menjalankan perintah yang Anda minati secara acak. Penyedia layanan Anda akan berterima kasih.

A Dwarf
sumber
@A Dwarf - terima kasih untuk ide ini, juga - ini akan menjadi rute yang sedikit lebih berguna jika saya ingin memeriksa intrusi dll pada beberapa secara sering tapi kuasi-acak
warren