sleep ficando travar no shell script

0

Eu tinha um script cron rodando no meu Ubuntu PC (12.04.3), que verifica periodicamente o espaço em disco. Houve um "sleep 5" também usado neste script. Este sistema ficou ativo por um mês, mas um problema é encontrado. Havia várias instâncias do script cron em execução (em torno de milhares) e várias instâncias de "suspensão".

Quando matei um dos processos de suspensão, o script cron associado a ele também foi concluído.

O sono trava com frequência? É necessário reiniciar a máquina para evitar isso? Qualquer outro método para evitar isso.

    
por pRAShANT 23.04.2015 / 09:35

1 resposta

0

Eu acho que você criou um loop de coisas.

Por exemplo, considere o seguinte script (ruim), vamos chamá-lo de check.sh :

while :; du -sh /home/user >> /some/file 2>/dev/null; sleep 5; done

Agora crie uma entrada cron para que check.sh seja executado a cada 30 minutos:

* * * * * bash /path/to/check.sh

Vamos considerar que o script seja executado pela primeira vez às 10:00, o espaço em disco será verificado e salvo em um arquivo. A parte complicada é sleep 5 , se você não colocar uma condição válida para fechá-la, ela irá pausar o script por 5 segundos e depois continuará do topo significando a mesma operação de verificação e escrita. Esse loop vai continuar e continuar.

Novamente após 30 minutos, cron inicia um novo processo que fará a mesma coisa repetidas vezes. Lembre-se de que o primeiro processo iniciado por cron às 10:00 ainda está em execução.

Este ciclo continuará e em 6 horas você terá 13 dos mesmos processos acionados por cron e, o mais importante, todo processo está sendo executado em um loop indefinido.

Em resumo, ao usar cron você não precisa de coisas como sleep 5 , a menos que sua operação exija algo assim, no último caso, coloque uma condição válida para que o processo não seja executado indefinidamente.

    
por heemayl 23.04.2015 / 12:12