web-dev-qa-db-ja.com

5秒ごとにスクリプトを実行する方法は?

5秒ごとに実行する必要があるスクリプトがあります。 cronは1分ごとにタスクを実行できることを知っていますが、毎秒何かを実行する方法はありますか?

65
myusuf3

Cronでは、最低1分間しか許可されていません。 couldで行うことは、タスクを実行してから5秒間スリープする無限ループのシェルスクリプトを記述することです。そうすれば、タスク自体にかかる時間に応じて、タスクは5秒ごとに実行されます。

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

上記の内容でmy-task.shファイルを作成し、sh my-task.shで実行できます。オプションで、supervisorをサービスとして設定して、システムの起動時などに起動するようにできます。

あなたはおそらくやるべきではないことをやっているように聞こえます。これはwrongを感じます。

64
Tommy Brunn

このようにして、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秒ごとに実行する必要がありますか?

35
warren

ループを使用するだけです:

while true ; do ./your-script & sleep 5; done

これは、スクリプトをバックグラウンドジョブとして開始し、5秒間スリープした後、再びループします。 Ctrl-Cを使用して中止するか、trueの代わりに他の条件を使用できます。 ! test -f /tmp/stop-my-scriptは、ファイル/tmp/stop-my-scriptが存在しないときにのみループします。

27
blueyed

GNUパッケージmcronを使用できます。これは「Vixie cron」の代替手段です。

http://www.gnu.org/software/mcron/manual/mcron.html#Top

「より細かい時間ポイント、つまり秒を簡単に指定できます。原則として、これはマイクロ秒まで延長できますが、これは実装されていません。」

10
David

Cactiを使用してルーターとスイッチを監視しますが、Cronは最低1分しか許可しないため、1つのポート/デバイスがダウンした場合、2分経過するまで警告はありません。

2
qttty

Cronの最小構成は数分で、5秒間は設定できません。秒を許可するQuartzを使用できます。 http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

2
Cody Harlow

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設定を再読み込みし、タイマーユニットを有効にして起動します。

2
Guss

私はこの種のことを非常にうまくやった(そしてマシンがリブートされるまで、最終結果は一度に数週間実行された)。私が今何をしていたかについては、情報を更新してキャッシュに入れます-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'行で開始できます。

1
Alister Bulman