ストリーム録画スクリプトの改善提案:タイムアウト?

ストリーム録画スクリプトの改善提案:タイムアウト?

以下のスクリプトを適用しようとしています。https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes)システムの特定のファイルが変更されたときにシステムにビデオストリームを記録させるには、次の手順を実行します。

#!/bin/bash

# Set initial time of file
LTIME=`stat -c %Z /path/to/monitored/file`

while true    
do
   ATIME=`stat -c %Z /path/to/monitored/file`

   if [[ "$ATIME" != "$LTIME" ]]
   then    
       echo "RUN COMMAND"
       LTIME=$ATIME
   fi
   sleep 5
done

明らかに、スクリプトは5秒ごとに監視されているファイルのタイムスタンプをポーリングして変更されたことを確認し、変更された場合は端末に何かを表示します。 echoコマンドは単なる概念証明であり、他のほとんどすべてのコマンドがスクリプト内でその場所を占有できることも明らかです。

これまでに得られた情報は私の目的にほぼ準拠しています(70分ストリーム録画recordingscript.sh用)。mplayer -dumpstream -dumpfile mystream URL

#!/bin/bash

# Set initial time of file
LTIME=`stat -c %Z /path/to/monitored/file`

while true    
do
   ATIME=`stat -c %Z /path/to/monitored/file`

   if [[ "$ATIME" != "$LTIME" ]]; then
      /path/to/my/recordingscript.sh
        break
      LTIME=$ATIME
   fi
   sleep 5
done

cron残りの問題は、このスクリプトを毎日タスク(5時間以内)で実行したいということです。その期間内に監視されるファイルが変更されていない場合は、次にcronが起動するまでスクリプトを中断/終了します。約5時間後に終了するように適応スクリプトを変更するにはどうすればよいですか?スクリプトを呼び出してこれを行うことができることを知っていますが、timeout 300mこれを行う他のより良い解決策があるかもしれないと思います。

答え1

いくつか変更し、スクリプトを使用することをお勧めします。

  • 小文字の変数名の使用
  • スペル表現「5時間(秒)」を使用して「放棄」変数を割り当てます。
  • filetomonitor変数で監視するファイルをパラメータ化します。
  • シェルが開始されてからの秒数を計算するbash変数の動作に応じて、ループをwhile true5時間繰り返すように変更します。SECONDSこれは、シェルスクリプトの起動時にゼロから始まります。
  • $( ... )バックティックを新しい形式に変更

更新されたスクリプト:

#!/bin/bash
giveup=$((5 * 60 * 60))
filetomonitor='/tmp/file-to-monitor'

ltime=$(stat -c %Z "$filetomonitor")
while [[ "$SECONDS" -lt "$giveup" ]]
do
  atime=$(stat -c %Z "$filetomonitor")
  if [[ "$atime" -ne "$ltime" ]]
  then
        echo Take action
        break           ## if we're only supposed to act once
        ltime=$atime
  fi
  sleep 5
done

そこに残しましたがbreakコメントしました。タスクを実行した後(5時間前)スクリプトを終了するにはコメントを解除line break;それ以外の場合は、現在のバージョンのスクリプトが5時間実行され(70分ジョブが4時59分に開始された場合はそれ以上)、ジョブを複数回呼び出すことができます。

関連情報