スクリプト内で午後2時に無限ループBashスクリプトを停止/終了します。

スクリプト内で午後2時に無限ループBashスクリプトを停止/終了します。

助ける! 14時に実行を「終了」/停止する必要がある単純なbashスクリプトがありますが、動作しません。アドバイス、提案、アドバイスなど何かありましたら、とても感謝します!よろしくお願いします!

#!/bin/bash
while :
do
if [ `date +%H` -ge 14 ]; then
 exit
fi
ffmpeg -rtsp_transport tcp -i rtsp://login:[email protected]:554/11 -metadata title="Live Cam" -vcodec copy -acodec aac -ac 2 -f flv rtmp://a.rtmp.youtube.com/live2/key
sleep 10
done

すべてがうまく機能しますが、予想通り午後2時に終了するのではなく、24時間を通して実行され続けます。実際には1日10時間実行しようとしましたが、cronジョブから始めて、スクリプト自体で「if then」ステートメントで停止する以外には何もわかりませんでした。

答え1

ここでは、ffmpegの前に「echo」を挿入し、終了する前に別の行に「echoexiting ...」を挿入してから、-geと-leを交互に使用して両方のブランチをテストしましたが、完全に機能しているようです。

私の考えでは、次のようにスクリプトを改善する必要があるようです。

#!/bin/bash
while :
do
  if [ `date +%H` -ge 14 ]; then
    exit
  fi
  ffmpeg -rtsp_transport tcp -i rtsp://login:[email protected]:554/11 -metadata title="Live Cam" -vcodec copy -acodec aac -ac 2 -f flv rtmp://a.rtmp.youtube.com/live2/key &
  pid_of_ffmpeg=$!
  sleep 10
  kill -9 $pid_of_ffmpeg
done

10秒後にffmpegを無慈悲に終了します。 (もちろん、時間を変更したり%H -gt 14以降に終了したい場合は、ffmpegを起動した後にメインループと同様のループを実行できます)。

関連情報