cronを「ランダム」にできますか?


12

たぶん私は完全に夢中です、そしてもしそうなら-それは大丈夫です。しかし、次のように、間抜けなメッセージをブロードキャストするためにジョブをスケジュールするにはどうすればよいfortuneですか?

明確化
はい-これは私の個人用ワークステーションです-本番サーバーで何か奇妙なことをする予定はありません:)

回答:


12

atatがインストールされていて、マシンが実行されていatdて、ユーザーがコマンドの使用を許可されている場合、このタイプの目的のためのよりシンプルなインターフェースがあります。

たとえば(man atまたはを使用して正確な構文を確認してくださいinfo at)、

at -f ファイル now + 53 minutes

または

at -f ファイル now + 2 hours

指定されたファイルのコマンドを、それぞれ53分または2時間で実行します。

at その後、スケジュールされたジョブの開始時に適切な(ランダムまたはその他の)開始、カウント、および時間単位で再実行できます。

編集

Arjanが以下に役立つように指摘しているように、これをおもちゃのアプリケーション以外に使用している場合、何が起こるかなどの問題について考える必要があります。

  1. 前の実行が完了する前に次の実行が開始された場合(たとえば、スクリプトが再入可能かどうか)または

  2. 実行が正しく完了しない場合、または

  3. 次の実行がまったくまたは時間通りに開始に失敗した場合(例えば、次の実行が開始予定であるときにマシンがオフになった場合にどうなるか)

  4. 失敗または成功した実行のログとレポートについて。


それは私が考慮していなかったアプローチです-そしてfile、次のat実行が含まれている場合、再帰的にすることができますか?
ウォーレン

素晴らしい-試しただけで、うまく機能します:)
ウォーレン

2
+1、ただし考慮すべき点がいくつかあります:at-commandが最初の行であり、スクリプトが長時間実行される場合(または間隔が短い場合)、複数のインスタンスを同時に実行することに注意してください。ただし、atがスクリプトの最後の行にある場合、スクリプトが失敗しても再スケジュールは実行されません。また、コマンドラインからスクリプトを実行すると、スクリプト自体も(再)スケジュールされます(そして、複数のスケジュールが同時に存在する可能性があります)。またcron、電子メールを介したエラー(または一般的な出力)の送信をサポートします。atそのようなものがあるかどうかもわかりませんか?
アルジャン

@Arjan - (この時点で)私はちょうど私のワークステーション上での楽しみを持って、それを使用していますので、私は...あまりにもそれが失敗し、私にメールを送信しない心配ないよ:) ..however -そのISについて考えることを何かこれが、たとえば、侵入のランダムチェックに拡張された場合
ウォーレン

私が想像していたスクリプトは、自身のコピーが一度に実行されているどのように多くの気にしないだろう
ウォーレン

13

/ etc / crontabには多くのコマンドがあり、あらゆる種類の処理を行っていますが、一部のコマンドには数秒で精度が必要です。これで、すべての時間を可視化して一元化しながら、cronの解像度をより細かくすることができます。

この例では、5分ごとに10〜50秒前にWebページを取得して解析します。

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

データの移動が遅いため、正確な時間を持っている必要はありませんが、Webページを待つ必要がないため、munin-nodeの実行時間を可能な限り短くするのに役立ちます。(プラグインはページをさらに30分間キャッシュして不要なヒットを減らしますが、5分ごとにデータベースを更新する必要があります)。

\%— cronは "\ n"の代わりに%を使用することに注意してください。メールテキストを1行に保持するのに役立ちます。


あなたがWebページをキャッシュしている場合、あなたは必ずしも正確な負荷の結果を得ることするつもりはない
ウォーレン

1
はい、私は知っています-「データの移動が遅い」-プラグインはサイトから通貨の為替レートを取得するため、禁止されたくありません。(私はトレーダーではありませんが、muninグラフを見るのに多くの時間を費やしています)私は地元の天気のために同様のプラグインを作りました。無限のアプリケーション!
アンディリーロビンソン

1
ああ!..非常にクールなアプローチ:)
ウォーレン

6

内部的にはcron、そのような機能は存在しないと思います。最善の解決策は、コマンドをシェルスクリプトに配置しsleep、スクリプトの上部にランダムな間隔を置いて$RANDOM変数を使用することだと思います。その後、通常のcronジョブでスクリプトを1日に1回実行します。

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2

1
sleep()は、サービスプロバイダーによって強制終了されることをほぼ保証します。もちろん、彼はサービスプロバイダーです。
ドワーフ

1
彼は自分のLinuxマシンか、誰かにランダムに富をプレゼントしているのなら、何かがあると思いました
ジョンT

まあ、それは本当です。
ドワーフ

なぜ睡眠は悪い考えですか?ちょうど...頼む
タデウシュA.Kadłubowski

@John Tの質問を明確化
ウォーレン

6

それはあなたが後のインターバルのタイプに依存します。ただし、スクリプトを1:30の確率でランダムに実行すると仮定します(30分ごとに1回)

  • たとえば、10分間のcronスクリプトを作成します。30分ごとに3回起動します。

  • スクリプト内では、ifステートメントの条件としてrandを使用します。randが0〜2の数値を返すようにします。0の場合、ifステートメントの内容を実行します。

基本的に、スクリプトは常に設定された間隔で起動します。ただし、関心のあるコマンドのみをランダムに実行します。サービスプロバイダーに感謝します。


@Aドワーフ-このアイデアにも感謝-これは、頻繁ではあるが準ランダムに侵入などをチェックしたい場合、少し便利なルートです
ウォーレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.