Nos últimos dias, precisei configurar um servidor para rodar uma aplicação web que estou desenvolvendo e necessitava fazer com que, caso o meu servlet container (estou utilizando o Jetty) parasse de funcionar, um outro processo levantasse o Jetty. Isso é um problema bastante comum e deve existir N maneiras de se resolver. Como sou iniciante em linux, scripts, etc... Resolvi criar um shell script para resolver este problema e com isso aprender um pouco como funcionam as coisas no linux.
Os assuntos abordados para resolver esse problema são :
- Agendamento de Tarefas no linux
- Shell script
Shell script
Shell script é uma linguagem de script usada em vários sistemas operativos (operacionais), com diferentes dialetos, dependendo do interpretador de comandos utilizado. Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux. (wikipedia)
Para identificar que o arquivo é um script é necessário que a linha inicial seja:
#!/bin/bash
Precisamos também setar a permissão para executar script:
$ chmod +x arquivo
Para executar o script basta digitar "./nome_do_script.sh".
Exemplo:
Crie um arquivo chamado "teste.sh" com o conteúdo abaixo, configure sua permissão e execute-o.
#!/bin/bash echo Olá mundo!
Agora vamos ao nosso script para deixar o Jetty sempre em execução:
Script:
O script funciona da seguinte maneira:
Verifica se tem algum processo "java" rodando que contenha na sua linha de comando "jetty.port=9090", caso exista, o script não faz mas nada, caso não exista, ele irá verificar se existe uma pasta chamada "logs", se não existir, ela será criada e dentro dela conterá um arquivo de log informando quando ocorreu do Jetty não está rodando e armazena o "load average" do servidor naquele momento, logo após, executa o serviço do jetty novamente.
OBS: O load average vai me indicar superficialmente como estava o status do servidor no momento em que o Jetty caiu.
Para uma melhor explicação sobre load average:
http://pt.wikipedia.org/wiki/Load_average
Agora, como fazer para agendar esse script para ser executado a cada X intervalo de tempo ?
Simples, adicionamos no serviço de agendamento do linux (cron) um agendamento para esse script.
Entendendo uma expressão cron
* * * * * [usuario] [comando]
Semântica dos valores de uma expressão cron:
- Minutos: Números de 0 a 59.
- Horas: Números de 0 a 23.
- Dias do mês: Números de 0 a 31.
- Mês: Números de 1 a 12.
- Dias da semana: Números de 0 a 7.
- Usuário: Usuário que irá executar o comando (não é necessário especificá-lo se o arquivo do próprio usuário for usado).
- Comando: Tarefa que será executada.
Nosso exemplo:
*/5 * * * * /caminho_do_seu_script/uptime.sh
Neste exemplo, o script de uptime será executado a cada 5 minutos.
Os agendamentos para seu usuário fica guardados em uma tabela chamada "crontab", para você poder adicionar um agendamento, apenas edite este arquivo adicionando o seu agendamento, para isto execute o comando abaixo:
$ crontab -e
Caso não exista agendamentos para o seu usuário, esse comando irá cria-ló. Se desejar ver os arquivos de agendamentos de cada usuário, você terá que logar como root e ir na pasta "/var/spool/cron/usuario".
Caso você deseje ver todos os agendamentos para seu usuário, digite:
$ crontab -l
Caso queira saber um pouco mais de CRON:
http://www.devin.com.br/crontab/
De uma maneira simplificada, resolvemos o problema de reiniciar o serviço do Jetty automaticamente, tomara que seja útil para você também...







![=] feliz natal...](http://29.media.tumblr.com/tumblr_lwfpzup6LO1r7n34ro1_75sq.jpg)

