Parar / matar um script Bash de loop infinito às 14h no script
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
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).