Como parar o cron job minuto?

2

Eu tenho um programa escrito em python; meu programa raspa um valor de algum site financeiro a cada minuto e insere esse valor em meu banco de dados. Meu programa leva 1 ou máximo 1,5 segundos para fazer este trabalho. Eu configurei um cron job para chamar meu programa a cada minuto. Eu preciso executar meu programa desta forma todos os dias das 9h às 16h. Agora, às vezes, posso ter que interromper meu programa para matar o programa a qualquer momento entre 9h e 16h. Como posso fazer isso?

De acordo com este link Eu tentei ps -o pid,sess,cmd afx | grep -A20 "cron$" e não consegui encontrar meu programa na lista, pois ele conclui seu trabalho em segundos.

Referindo-se a este , experimentei /etc/init.d/cron stop e pkill cron que mata todos os trabalhos do cron - o que eu não quero. Estou executando este cron no Ubuntu Linux.

    
por Chiyaan Suraj 19.05.2015 / 10:06

4 respostas

4

Geralmente, parar e iniciar o daemon cron do sistema é uma má ideia. Comentar a frase nem sempre é conveniente, então aqui estão algumas alternativas relacionadas

Use um semáforo

Uma solução para esse requisito é usar um semáforo - ou sinalizador - para indicar se o script pode ou não ser executado. Nesta instância, o semáforo pode ser representado pela presença ou ausência de um arquivo: se o arquivo existir, então não execute o script, caso contrário, execute-o. (É claro que o teste pode ser revertido para que o script seja executado apenas se o arquivo existir).

Aqui está uma entrada cron de amostra com a verificação do semáforo em vigor:

* * * * *    test ! -f /tmp/stop && /path/to/script...

Para evitar que o script seja executado, basta executar touch /tmp/stop . Para permitir que ele comece a ser executado novamente, apenas rm /tmp/stop .

Para reverter o teste, use este teste para o arquivo /tmp/run :

* * * * *    test -f /tmp/run && /path/to/script...

Você provavelmente desejaria usar um arquivo de semáforo diferente na prática para garantir que apenas pessoas autorizadas pudessem sinalizar o script para parar (ou iniciar). Uma opção pode ser "$HOME"/.scriptname.stop para um script chamado scriptname .

Evitar que o código seja executado

Se o script for executável e chamado por /path/to/script... , basta remover as permissões executáveis ou movê-las para fora do caminho para que o script seja executado:

chmod a-x /path/to/script

ou

mv /path/to/script{,.stop}    # i.e. mv /path/to/script /path/to/script.stop

Esta é uma correção rápida e feia que fará com que cron gere um erro toda vez que tentar executar seu código. Normalmente, esses erros são capturados e enviados por e-mail para o proprietário da tarefa cron , portanto, um pequeno teste antes de executar o script impedirá que essa situação seja sinalizada:

* * * * *    test -x /path/to/script && /path/to/script...
    
por 19.05.2015 / 10:45
1

Não mate o daemon do cron, pois ele executa muitas tarefas necessárias ao sistema. Em vez disso, edite o arquivo crontab e comente o trabalho cron relacionado ao seu script. (FYI, você não precisa reiniciar o daemon cron depois de editar isso.)

    
por 19.05.2015 / 10:24
1

O método mais simples que posso imaginar é apenas editar o crontab e comentar o cronjob.

Abra o crontab com:

crontab -e

E comente # a linha que é seu cronjob.

    
por 19.05.2015 / 10:24
1

Edite seu programa python e deixe-o verificar primeiro um arquivo 'não execute'. Se esse arquivo existir, saia do programa, por exemplo

import os.path
if os.path.isfile('/tmp/disable_mypython'): exit()

Se você procurar por um arquivo chamado por exemplo /tmp/disable_mypython , pode facilmente "desabilitar" seu programa usando:

touch /tmp/disable_mypython

e ativá-lo novamente usando:

rm /tmp/disable_mypython
    
por 19.05.2015 / 10:48