Verificar se o processo já está em execução na webfaction?

2

Eu uso o framework Django na webfaction e tenho 5 tarefas cron diferentes. Um deles dura muito mais do que os outros e às vezes fica preso (30-120 segundos ou mais).

Já configurei essa tarefa cron para executar a cada minuto, no entanto, If isnão é concluído, outro processo com /home/aemdy/webapps/hvan/myproject/myfile.py inicia, o que causa alto uso de memória, lentidão no trabalho do site e leva a falhas do apache ou vazamento de memória.

Eu não quero configurá-lo para */3 * * * * , no entanto, eu quero algo como:

if this process in process list:
    pass
else:
    run process

Isso pode ser feito?

    
por Karolis 24.07.2011 / 09:19

1 resposta

2

O método tradicional para conseguir isso seria fazer com que seu script verifique a existência de um arquivo em /var/run quando ele for iniciado, se nenhum existir, crie um contendo seu próprio PID. Na conclusão, o script removeria esse arquivo. Se o arquivo existir, o script simplesmente sai. Desta forma, independentemente da frequência com que o script é chamado, ele só executará seu código principal se ainda não estiver em execução.

O problema com essa abordagem é que uma terminação impura deixa esse arquivo presente no sistema, portanto, muitas vezes ele é aumentado com uma verificação para ver se o PID especificado existe e se esse PID é para o script correto.

Esse método exige que você altere seu script em vez de simplesmente alterar sua entrada crontab , mas é um mecanismo consagrado pelo tempo para resolver esse tipo de problema.

    
por 24.07.2011 / 15:45

Tags