回答:
at
at
がインストールされていて、マシンが実行されていatd
て、ユーザーがコマンドの使用を許可されている場合、このタイプの目的のためのよりシンプルなインターフェースがあります。
たとえば(man at
またはを使用して正確な構文を確認してくださいinfo at
)、
at -f
ファイル now + 53 minutes
または
at -f
ファイル now + 2 hours
指定されたファイルのコマンドを、それぞれ53分または2時間で実行します。
at
その後、スケジュールされたジョブの開始時に適切な(ランダムまたはその他の)開始、カウント、および時間単位で再実行できます。
編集
Arjanが以下に役立つように指摘しているように、これをおもちゃのアプリケーション以外に使用している場合、何が起こるかなどの問題について考える必要があります。
前の実行が完了する前に次の実行が開始された場合(たとえば、スクリプトが再入可能かどうか)または
実行が正しく完了しない場合、または
次の実行がまったくまたは時間通りに開始に失敗した場合(例えば、次の実行が開始予定であるときにマシンがオフになった場合にどうなるか)
失敗または成功した実行のログとレポートについて。
at
-commandが最初の行であり、スクリプトが長時間実行される場合(または間隔が短い場合)、複数のインスタンスを同時に実行することに注意してください。ただし、at
がスクリプトの最後の行にある場合、スクリプトが失敗しても再スケジュールは実行されません。また、コマンドラインからスクリプトを実行すると、スクリプト自体も(再)スケジュールされます(そして、複数のスケジュールが同時に存在する可能性があります)。またcron
、電子メールを介したエラー(または一般的な出力)の送信をサポートします。at
そのようなものがあるかどうかもわかりませんか?
/ 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行に保持するのに役立ちます。
内部的にはcron
、そのような機能は存在しないと思います。最善の解決策は、コマンドをシェルスクリプトに配置しsleep
、スクリプトの上部にランダムな間隔を置いて$RANDOM
変数を使用することだと思います。その後、通常のcronジョブでスクリプトを1日に1回実行します。
#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2
それはあなたが後のインターバルのタイプに依存します。ただし、スクリプトを1:30の確率でランダムに実行すると仮定します(30分ごとに1回)
たとえば、10分間のcronスクリプトを作成します。30分ごとに3回起動します。
スクリプト内では、ifステートメントの条件としてrandを使用します。randが0〜2の数値を返すようにします。0の場合、ifステートメントの内容を実行します。
基本的に、スクリプトは常に設定された間隔で起動します。ただし、関心のあるコマンドのみをランダムに実行します。サービスプロバイダーに感謝します。
file
、次のat
実行が含まれている場合、再帰的にすることができますか?