스크립트 내에서 오후 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시간 내내 계속 실행됩니다. 사실 하루에 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를 시작한 후 메인 루프와 유사한 루프를 수행할 수 있습니다).

관련 정보