Parar / matar um script Bash de loop infinito às 14h no script

Sep 13 2020

Socorro! Eu tenho um script bash simples que deve "sair" / parar de ser executado às 14:00, mas não vai funcionar. Ficaria muito grato por quaisquer dicas, sugestões, conselhos, qualquer coisa! Muito obrigado antecipadamente!

#!/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

Está tudo funcionando bem, mas não fecha às 14h, como deveria, e continua rodando todos os relógios. Na verdade, eu estava tentando fazê-lo funcionar por 10 horas todos os dias, mas não consegui pensar em nada, exceto iniciá-lo a partir de um cron job e interrompê-lo com a instrução "if then" no próprio script.

Respostas

user56452 Sep 13 2020 at 19:42

Testei seu script aqui inserindo um "echo" na frente do ffmpeg e um "echo saindo ..." em uma linha separada antes da saída e, em seguida, alternando o -ge com -le para testar os dois ramos e parece funcionar perfeitamente .

Eu acho que você precisa melhorar o script assim:

#!/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

Que mata ffmpeg sem piedade após 10 segundos. (Você pode alterar os tempos, é claro, ou se quiser eliminá-lo após% H -gt 14, faça um loop semelhante ao loop principal após iniciar o ffmpeg).