Stop / Kill a Infinite Loop Bash Script lúc 2:00 chiều trong script
Cứu giúp! Tôi có tập lệnh bash đơn giản này được cho là "thoát" / ngừng thực thi lúc 14:00 nhưng nó sẽ không hoạt động. Sẽ thực sự biết ơn bất kỳ gợi ý, đề xuất, lời khuyên, bất kỳ điều gì! Rất cám ơn trước!
#!/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
Tất cả đều hoạt động tốt nhưng nó sẽ không ngừng hoạt động lúc 2 giờ chiều như dự kiến và vẫn tiếp tục chạy tất cả các đồng hồ xung quanh. Trên thực tế, tôi đã cố gắng làm cho nó chạy 10 giờ mỗi ngày nhưng không thể nghĩ ra bất cứ điều gì ngoại trừ việc bắt đầu nó từ một công việc cron và sau đó dừng nó bằng câu lệnh "if then" trong chính script.
Trả lời
Tôi đã thử nghiệm tập lệnh của bạn ở đây bằng cách chèn "tiếng vọng" vào trước ffmpeg và "tiếng vọng thoát ra ..." trên một dòng riêng biệt trước lối ra và sau đó xen kẽ -ge với -le để kiểm tra cả hai nhánh và nó có vẻ hoạt động hoàn hảo .
Tôi đoán bạn cần cải thiện tập lệnh như vậy:
#!/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
Tiêu diệt ffmpeg không thương tiếc sau 10 giây. (Tất nhiên, bạn có thể thay đổi thời gian hoặc nếu bạn muốn loại bỏ nó sau% H -gt 14, thì hãy thực hiện một vòng lặp tương tự như vòng lặp chính sau khi bắt đầu ffmpeg).