在脚本内于下午 2:00 停止/终止无限循环 Bash 脚本

在脚本内于下午 2:00 停止/终止无限循环 Bash 脚本

帮助!我有一个简单的 bash 脚本,应该在 14:00“退出”/停止执行,但它不起作用。如果有任何指点、建议、忠告,任何事情,我都会非常感激!提前谢谢了!

#!/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:00 退出,而是继续全天候运行。事实上,我试图让它每天运行 10 个小时,但除了从 cron 作业启动它然后用脚本本身中的“if then”语句停止它之外,什么也想不出来。

答案1

我在这里测试了您的脚本,方法是在 ffmpeg 前面插入一个“echo”,并在退出之前在单独的一行上插入一个“echo exiting...”,然后交替使用 -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 后执行类似于主循环的循环)。

相关内容