5秒ごとに実行する必要があるスクリプトがあります。 cron
は1分ごとにタスクを実行できることを知っていますが、毎秒何かを実行する方法はありますか?
Cronでは、最低1分間しか許可されていません。 couldで行うことは、タスクを実行してから5秒間スリープする無限ループのシェルスクリプトを記述することです。そうすれば、タスク自体にかかる時間に応じて、タスクは5秒ごとに実行されます。
#!/bin/bash
while true; do
# Do something
sleep 5;
done
上記の内容でmy-task.sh
ファイルを作成し、sh my-task.sh
で実行できます。オプションで、supervisor
をサービスとして設定して、システムの起動時などに起動するようにできます。
あなたはおそらくやるべきではないことをやっているように聞こえます。これはwrongを感じます。
このようにして、12個のバックグラウンドプロセスを開始するスクリプトを毎分キックオフするcron
ジョブを使用できます。
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
私の質問は、)EARTHで、5秒ごとに実行する必要がありますか?
ループを使用するだけです:
while true ; do ./your-script & sleep 5; done
これは、スクリプトをバックグラウンドジョブとして開始し、5秒間スリープした後、再びループします。 Ctrl-Cを使用して中止するか、true
の代わりに他の条件を使用できます。 ! test -f /tmp/stop-my-script
は、ファイル/tmp/stop-my-script
が存在しないときにのみループします。
GNUパッケージmcronを使用できます。これは「Vixie cron」の代替手段です。
http://www.gnu.org/software/mcron/manual/mcron.html#Top
「より細かい時間ポイント、つまり秒を簡単に指定できます。原則として、これはマイクロ秒まで延長できますが、これは実装されていません。」
Cactiを使用してルーターとスイッチを監視しますが、Cronは最低1分しか許可しないため、1つのポート/デバイスがダウンした場合、2分経過するまで警告はありません。
Cronの最小構成は数分で、5秒間は設定できません。秒を許可するQuartzを使用できます。 http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
SystemDタイマーユニットを使用すると、5秒ごとにサービスをトリガーできます。
サービスユニットの名前がmystuff.service
で、/etc/systemd/system
にインストールされているとします(ユーザーのcrontabを置き換える場合は、 SystemDユーザーサービス をチェックしてください)、タイマーユニットを記述できます次のように、起動時にサービスを実行してから5秒ごとにサービスを実行します。
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
次に、systemd設定を再読み込みし、タイマーユニットを有効にして起動します。
私はこの種のことを非常にうまくやった(そしてマシンがリブートされるまで、最終結果は一度に数週間実行された)。私が今何をしていたかについては、情報を更新してキャッシュに入れます-10秒ごとに更新します。
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
「exec $ 0」はスクリプトを再起動しますが、実行中のスクリプトは置き換えます。最初はcrontab '@reboot'行で開始できます。