script VLC no servidor ubuntu

0

Eu preciso de um script pequeno que execute três comandos vlc ao mesmo tempo (no servidor Ubuntu 14.04) conforme indicado abaixo:

#!/bin/sh
cvlc -vvv v1 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5656,access=http}" 
cvlc -vvv v2 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5657,access=http}" 
cvlc -vvv v3 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5658,access=http}" 

Eu preciso da maneira ou método perfeito para que o script execute 3 comandos do VLC (todos os comandos devem estar rodando no mesmo tempo e silenciosamente no back ground).

Também é necessário outro script para verificar se o script acima está em execução (todo o comando vlc no script acima está em execução) se foi interrompido ou travado para reiniciá-lo.

Obrigado antecipadamente

Shata

    
por Shata Nar 04.01.2015 / 14:47

3 respostas

1

Você pode executar o script bash em segundo plano usando a tela.

Por favor, confira os seguintes artigos sobre ele.

link

link

link

Você pode usar monit para manter o comando em execução. Ele será iniciado se o serviço falhar.

    
por 26.05.2016 / 05:34
0

Que tal experimentar: nohup seu-comando &

"nohup" garante que o processo não será encerrado após o logout e "&" no final garante que todo o comando será executado em segundo plano.

    
por 10.02.2015 / 21:33
0

A maneira usual de enviar em segundo plano um processo é usar o operador & após o seu comando (como sugerido por Glenn).

Para ter a possibilidade de individualizar o status do processo depois de algum tempo, você precisa conhecer seu PID. Portanto, você precisa encontrar uma maneira de capturar o PID (ID do processo) do processo recém-lançado.
Está disponível na variável $! .

Note que você precisa armazená-lo em outra variável porque ele será atualizado após cada chamada de comando. Nesse caso, você pode armazenar o PID em um arquivo que pode ser usado posteriormente com um segundo script . Um bom lugar para armazená-lo parece ser /var/lock/yourscripdirectory/lock .
Em cada reinicialização, esse diretório deve ser limpo automaticamente.

Seu primeiro script (vamos chamá-lo de s1.sh ) deve executar seus comandos e armazenar os PIDs e pode ser semelhante ao abaixo:

#!/bin/sh
MyLockDir="/var/lock/${0##*/}"
mkdir -P     # it creates if needed the directory
             # /var/lock/yourscriptname without its path 
cvlc -vvv v1 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5656,access=http}" &
echo $! >${MyLockDir}/5656  # here you store in the file 5656 the PID
cvlc -vvv v2 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5657,access=http}" &
echo $! >${MyLockDir}/5657
cvlc -vvv v3 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:5658,access=http}" &
echo $! >${MyLockDir}/5658

Um segundo script (vamos chamar s2.sh ) tem que verificar se o processo com o PID foi escrito no arquivo criado anteriormente. Deve checj se ainda estiver em execução e atualizá-lo, se necessário. Veja algumas dicas das linhas abaixo:

#!/bin/sh
MyPort=$2
MyLockDir="/var/lock/s1.sh"
mypid="$(cat ${MyLockDir}/${MyPort})"
ps -p $mypid > /dev/null; 
if [ $? == 0 ] ; 
  then                       # Running
    echo "# It runs ... " ;  # or whatever you want
  else                       # NOT Running 
   cvlc -vvv $1 --sout "#transcode{vcodec=h264,vb=999,acodec=mp3,ab=128,deinterlace channels=2,samplerate=44100}:standard{mux=ts,dst=x.x.x.x:$MyPort,access=http}" &
   echo $! >${MyLockDir}/$MyPort
fi

por exemplo. você pode executar o segundo script com ./s2.sh v1 5656 (ou com ./s2.sh v2 5657 ...) para cada porta que precisar.

Uma maneira um pouco mais complexa é criar para cada porta um diretório com esse nome em seu LockDir e colocar o arquivo de bloqueio com o PID dentro dele, interceptar um comando remove para o diretório em o script em si e verifique mais tarde se o diretório existe ... veja dicas aqui

Dessa forma, você terá a garantia de que apenas um script concorrente pode criá-lo e executar uma cvlc instance nessa porta.

UPDATE: Um comentário
P: Por que sugerir armazenar o PID em vez disso, para verificá-lo com outros comandos como ps -ef | grep '5657' ?. R: Em geral o PID de um processo é único, entretanto você não pode saber de antemão se a string que está usando para grep a ps output não é usada por outro comando ... o PID existe por esse motivo :)

    
por 05.01.2015 / 00:44