Miqueloti
(usa Lubuntu)
Enviado em 02/01/2012 - 15:56h
Olá gente,
Em meu trabalho eu tenho que preparar scripts para serem executados em um servidor solaris via SSH, até ai tudo bem.
O problema é que estão alegando lentidão das demais aplicações quando os meus scripts rodam (devido a utilização intensa dos BD's) e me restringiram a executar os scripts apenas entre 00:00 às 06:00.
Os scripts muitas vezes não terminam de efetuar todo o seu trabalho de manipulação de dados neste intervalo de tempo, sendo necessário assim matar o script (sim, não permitiram nem deixar em STOP, preciso matá-lo).
Para iniciar o processo é fácil, eu agendo o comando que inicializa o script no terminal utilizando o at.
Minha dúvida é, como agendar a morte de um processo que ainda nem nasceu? Como obter o pid deste processo que ainda será iniciado para que eu possa matar este às 06:00?
Informações a serem consideradas:
1- Os scripts são em java, poderia dar um pkill -9 java e resolveria o problema matando todos os processos java da maquina, se não fosse o fato da Virtual Machine que reside na mesma. Existe alguma forma de tornar o processo da VM indestrutível ao pkill -9 java? isto resolveria o problema!
2- Consigo listar o pid de meu script utilizando o comando "ps -ef | grep nome_do_script | awk '{print $2}' | head -1" só que não consigo utilizar o retorno deste pid com o comando kill. Queria poder fazer algo deste tipo: kill -9 | ps -ef | grep nome_do_script | awk '{print $2}' | head -1
Bem, é esta a minha duvida gente, peço desculpas pela dificuldade de expressar o meu problema, mais tentei deixar da forma mais clara possível, mesmo me prolongando demasiadamente no tópico.
__________________________________________________
Editando: Consegui obter o pid, só que o comando kill não está funcionando no at. como executar um kill no at?
segue meu at para matar os processos:
bash-2.03# at 00:00
at> VAR0=$(ps -ef | grep Feeder | awk '{print $2}' | sort | head -1)
at> kill -9 $VAR0
at> VAR0=$(ps -ef | grep Feeder | awk '{print $2}' | sort | head -1)
at> kill -9 $VAR0
at> <EOT>
commands will be executed using /bin/csh
job 1325530380.a at Mon Jan 3 00:00:00
Só que não está funcionando, se eu digitar no terminal o comando ele mata o processo, agendando com at não funciona. Li que o awk possui problemas para funcionar com o crontab, portanto modifiquei o comando para VAR0=$(ps -ef | grep Feeder | cut -d" " -f6 | sort | head -1) só que também não executou. Alguém sabe me dizer como executar um kill com at?
___________________________________________________
Editando: Resolvido o problema!!! Pelo que eu percebi creio que não se pode utilizar variaveis dentro das tarefas agendadas, portanto fiz um arquivo chamado kill.sh com o conteúdo abaixo:
VAR0=$(ps -ef | grep Feeder | cut -d" " -f6 | sort | head -1)
kill -9 $VAR0
e na hora de agendar o kill da tarefa é só chamar o script como abaixo:
./kill.sh
Peço desculpas por deixar sujo este tópico, mais consegui a solução para o problema!