Linuxで10秒ごとに実行されるcronジョブをスケジュールするにはどうすればよいですか?


回答:


10

10秒ごとにジョブをスケジュールすることはできませんが、ジョブを1分ごとに実行し、10秒間隔でループでスリープするようにスケジュールできると思います。これは、10秒の間隔が切れる前にコマンドが完了するか、次のコマンドが実行されるときに重複することを前提としています。これは不安定な解決策のように感じられますが、スクリプトのメインコマンドの非常に短い実行を保証できる場合は機能します。

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done

同様のことをします... crontabで*を使用するだけで、スクリプトは永久にflockとループを使用し、ロックを取得できない限り終了しません。
ピーター

22

先週も同様の仕事をしました。私の解決策は、標準のcronエントリを目的の頻度に乗算することでした。私のcrontabは次のようになります:

* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php

デバッグなどのためにmyscript.phpの結果を確認したい場合は、追加するだけです

&> /tmp/myscipt.log

上記のcrontabの各行に。次に、stderrとstdoutがログファイルにリダイレクトされます。


2
創造的なcronの使用のための+1
shodanshok

2
これが私見の最高のソリューションです。何をしているのかは明確であり、スクリプトやサードパーティのソリューションを必要としません。
ジェレミー


0

Cronでは、最低1分間しか許可されていません。これを試すことができます-

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)

0

5秒など、10秒未満にしたい場合は、次のような小さなスクリプトでワーカーループを作成することをお勧めします。

#!/bin/bash

INTERVAL=5
while true; do

  echo "do something"

  # wait for next interval
  WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
  while [ $(date +%s) -lt $WAIT_UNTIL ]; do
    sleep 1
  done

done

秒未満にする必要がある場合は、dateコマンドにマイクロ秒を追加します。


0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

ここでは、10秒の間隔でスクリプトを実行できます...


このソリューションはすでに5年前に投稿されています。再度投稿するのではなく、ただ投票してください。
ジェラルドシュナイダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.