Script Python não sendo executado como cronjob

1

Eu tentei de tudo e já vi outras perguntas aqui sobre isso, mas não posso para a vida de mim executar um script python como um cronjob.

Eu tentei o seguinte.

* * * * * /usr/bin/python /home/myhome/myscript.py

Tudo que o myscript.py faz é dormir por 30 segundos para que eu possa verificar os processos se ele estiver em execução, mas ainda não o vi.

import time
time.sleep(30)

O que estou perdendo? Não deveria correr? Eu até tentei abrir um arquivo em / tmp e sair lá, mas sem sorte. Estou assumindo seu problema com alguma variável de ambiente, mas não sei por onde começar.

BTW isso funciona bem na linha de comando.

    
por KingKongFrog 16.01.2013 / 00:56

1 resposta

4

Sim, isso deve funcionar bem, presumindo que quando você diz "corre bem na linha de comando" você está literalmente colando o mesmo comando da entrada crontab. Coisas a verificar:

  1. O daemon do cron está realmente em execução? (Executar pidof cron )
  2. Se estiver em execução, tente reiniciá-lo. (Depende do seu sabor do Unix, mas algo como service cron restart ou /etc/init.d/cron restart )
  3. Se o seu script ainda não for executado, verifique tudo em /var/log para a saída apropriada - o arquivo específico depende da configuração do syslog, mas /var/log/messages e /var/log/syslog são boas opções se /var/log/cron não existir .

Observação: você precisará de root para fazer a maioria dessas coisas. Se não tiver acesso, precisará falar com a pessoa que administra a máquina.

Além disso, quando você diz que abre um arquivo em /tmp , essa é provavelmente a coisa mais confiável que você pode fazer para garantir sua execução. Logo no início do seu script (antes das importações ou qualquer outra coisa), adicione isto:

with open("/tmp/testfile", "a") as fd:
    fd.write("I am running\n")

Você também pode verificar se o seu crontab está sendo instalado corretamente - ele deve ser colocado em algo como /var/spool/cron/crontabs (no Ubuntu Linux, pode ser diferente em diferentes sabores do Unix). Você deve ver um arquivo lá com seu nome de usuário, que deve conter sua entrada.

Por fim, se você ficar realmente desesperado, poderá strace do seu processo do cron para ver o que está fazendo:

sudo strace -f -p 'pidof cron'

Você não precisa se preocupar muito com os detalhes, mas deve estar fazendo algo a cada minuto. Se não é, então algo está errado.

    
por 16.01.2013 / 01:07