Radio Automática2

1 – Introdução

Depois de um tempo percebemos que o processo de automatização da radio dá certo, porém, observamos dois problemas. No primeiro detectamos que a radio não ficava online por muito tempo, o processo em execução ices2 é finalizado, por falta de conexão que leva ao fechamento do processo (ices-core/main Shutdown complete). O segundo problema é que as vezes a rádio esta online, mas não estava tocando música, o processo mplayer, responsável por sua vez em reproduzir a playlist de musicas, também é finalizado, por conta de vários motivos, desde uma musica que o programa não encontrou no diretório, até arquivos listados dentro da playlist que não arquivos de áudio.

2 – A pesquisa

Para sana os problemas citados foi feita uma pesquisa para se descobrir se há possibilidade do sistema verificar e reativar os processos que não estão em execução. Não foram encontrados pacotes prontos, no sistema de empacotamento de arquivos do Debian. Portanto, numa pesquisa refinada na internet foi descoberto um script que faz a verificação de execução de programas, disponível em http://www.vivaolinux.com.br/topico/Shell-Script/Verificar-execucao-de-programa . Com isto veio a fase de adaptação do script para as nossas necessidades. Para solucionar o problema do processo ices2 foi adaptado o seguinte script:

#!/bin/bash
# Script do Vivaolinux
# SMarcell em Verificar execução de programa [RESOLVIDO]
# Disponivel em http://www.vivaolinux.com.br/topico/Shell-Script/Verificar-execucao-de-programa
# Adptação de Bruno Gonsalves para a o programa ices2 

ps -C ices2 > /dev/null
if [ $? = 0 ]
then
echo "O programa esta rodando"
else
echo "Iniciando programa"
/usr/bin/ices2 /etc/radio/ices2_config_transmissao.xml &
fi

A primeira linha ps -C ices2 > /dev/null procura pelo processo se esta ativo no sistema, caso a resposta seja positiva entra em ação as linhas if [ $? = 0 ] , then, echo “O programa esta rodando” . Caso a resposta seja negativa (≠ 0) as linhas else , echo “Iniciando programa” , /usr/bin/ices2 /etc/radio/ices2_config_transmissao.xml &, são executadas. Esta explicação serve também para solucionar o problema do processo mplayer com a adaptação seguinte:

#!/bin/bash
# Script do Vivaolinux
# SMarcell em Verificar execução de programa [RESOLVIDO]
# Disponivel em http://www.vivaolinux.com.br/topico/Shell-Script/Verificar-execucao-de-programa
# Adptação de Bruno Gonsalves para a o programa ices2 

ps -C mplayer > /dev/null
if [ $? = 0 ]
then
echo "O programa esta rodando"
else
echo "Iniciando programa"
/usr/bin/mplayer -shuffle -playlist /HD_BK/administrador/Desktop/ListadeReproducao.pls &
fi

3 – O(s) outro(s) problema(s)

Com os script’s prontos veio outro problema, como fazer para que os mesmos ficassem em execução, ou melhor, como de tempo em tempo estes script’s fossem executados automaticamente no sistema. Poderíamos coloca-los na inicialização dentro do arquivo /etc/rc.local, contudo estes script’s não seriam executados de tempo em tempo. Então surgiu o estudo do software cron, em pouca palavras, este software executa ações agendadas. O problema que ele é executado sob um serie de dependências, ou seja, para o cron entrar em ação são necessários outros softwares. Então vamos as configurações. Como usuário de administração do sistema (root) vamos editar o arquivo /etc/crontab.

bruno@debian:~$ su
Senha:
debian:/home/bruno#  nano etc/crontab

Antes do sinal # adicione a linha 0-59/5 * * * * root anacron, resultando em:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do. 

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

# m h dom mon dow user   command
17 *   * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6   * * *   root   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6   * * 7   root   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6   1 * *   root   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0-59/5 *    * * *   root    anacron
#

Salve as modificações pressionando as teclas Ctrl + o e feche o nano com Ctrl + x. Agora vamos a agendar uma duas tarefas no crontab. Para abrir o “agendador” digite os comandos su e depois crontab -e.

bruno@debian:~$ su
Senha:
debian:/home/bruno#  crontab -e

Depois vamos adicionar:

0-59/5 * * * * /home/administrador/radio/./verifica_transmissao.sh
0-59/6 * * * * /home/administrador/radio/./verifica_mplayer.sh

3.1 – Explicando

3.1.1 – Criando os script’s

Vamos criar o script ./verifica_transmissao.sh. Execute cd radio e depois nano ./verifica_transmissao.sh.

bruno@debian:~$ cd radio
bruno@debian:~/radio$ nano  verifica_transmissao.sh

Dentro do aquivo será adicionado:

#!/bin/bash
# Script do Vivaolinux
# SMarcell em Verificar execução de programa [RESOLVIDO]
# Disponivel em http://www.vivaolinux.com.br/topico/Shell-Script/Verificar-execucao-de-programa
# Adptação de Bruno Gonsalves para a o programa ices2 

ps -C ices2 > /dev/null
if [ $? = 0 ]
then
echo "O programa esta rodando"
else
echo "Iniciando programa"
/usr/bin/ices2 /etc/radio/ices2_config_transmissao.xml &
fi

Depois salve as modificações pressionando as teclas Ctrl + o e feche o nano com Ctrl + x. Agora é a vez de criar o script ./verifica_mplayer.sh. Execute nano ./verifica_transmissao.sh.

bruno@debian:~/radio$ nano  verifica_mplayer.sh

Dentro do aquivo será adicionado:

#!/bin/bash
# Script do Vivaolinux
# SMarcell em Verificar execução de programa [RESOLVIDO]
# Disponivel em http://www.vivaolinux.com.br/topico/Shell-Script/Verificar-execucao-de-programa
# Adptação de Bruno Gonsalves para a o programa ices2 

ps -C mplayer > /dev/null
if [ $? = 0 ]
then
echo "O programa esta rodando"
else
echo "Iniciando programa"
/usr/bin/mplayer -shuffle -playlist /HD_BK/administrador/Desktop/ListadeReproducao.pls &
fi

Agora é só salvar as modificações pressionando as teclas Ctrl + o e fechar o nano com Ctrl + x.

3.1.1 – Explicando o cron

Fizemos a edição do arquivo /etc/crontab com a adição da linha 0-59/5 * * * * root anacron. Este arquivo é o que configura o cron, a adição da linha, traduzindo fica assim: entre os minutos 0 e 59 de 5 em 5 minutos (0-59/5), todas as horas (*), todos os dias do mês (*), todos os meses (*), todos os dias da semana (*), o usuário (root), vai executar o comando (anacron).

Em linha gerais o anacron é parte do cron que deveria ser inicializado junto com o sistema. Depois editamos o “agendador” do cron com o comando crontab -e e nele adicionamos as linhas:

0-59/5 * * * * /home/administrador/radio/./verifica_transmissao.sh
0-59/6 * * * * /home/administrador/radio/./verifica_mplayer.sh

Traduzindo:

0-59/5 * * * * /home/administrador/radio/./verifica_transmissao.sh

Entre os minutos 0 e 59 de 5 em 5 minutos (0-59/5), todas as horas (*), todos os dias do mês (*), todos os meses (*), todos os dias da semana (*), será executado o script (/home/administrador/radio/./verifica_transmissao.sh).

0-59/6 * * * * /home/administrador/radio/./verifica_mplayer.sh

Entre os minutos 0 e 59 de 5 em 5 minutos (0-59/5), todas as horas (*), todos os dias do mês (*), todos os meses (*), todos os dias da semana (*), será executado o script (/home/administrador/radio/./verifica_mplayer.sh).

4 – Referencias