Crontab executa o comando Django, mas nada acontece

0

(x-postado no StackOverflow)

Eu configurei o cron para executar o seguinte comando para o django-cron (django 1.10.5, python 3.5, anaconda 4.2.0) no ubuntu 16.04:

PATH=/user/project/projectname/website
* * * * * ./manage.py runcrons "app.crons.RunCronJob"

Aqui está minha árvore de arquivos, localizada diretamente abaixo do nível mais alto do site remoto ( / ):

|-- user
|   |-- project
|   |   |-- projectname
|   |   |   |-- website
|   |   |   |   |-- file.txt
|   |   |   |   |-- manage.py
|   |   |   |   |-- app (a django app)
|   |   |   |   |   |-- crons.py

RunCronJob é um cronjob em crons.py que acrescenta uma linha a file.txt under /website . Quando eu digito no diretório /website e faço manualmente ./manage.py runcrons "app.crons.RunCronJob" , ele funciona muito bem. No entanto, quando o cronjob que eu configurei é executado, ele não acrescenta nada ao meu arquivo de texto. Verifiquei que a tarefa Cron está sendo executada a cada minuto com o serviço de correspondência grep cron /var/log/syslog , mas os dados que recebi parecem não me informar nada sobre o motivo pelo qual não estão funcionando.

(Observação para python: eu adicionei os.chdir(os.path.dirname(sys.argv[0])) ao topo do meu crons.py para garantir que o arquivo de texto seja gravado no diretório correto , não importa onde o comando é executado. Por exemplo, executando website/manage.py runcrons "app.crons.RunCronJob" de /projectname is Trabalhando para mim também. Por esta razão, eu não suspeito que meu problema esteja relacionado ao django, a biblioteca do django-cron ou python.)

Eu tenho visto algumas outras respostas que discutem alguns problemas comuns com o cron e tentei o meu melhor para corrigir qualquer problema: meu crontab tem uma nova linha no final, eu configurei meu fuso horário (embora isso não deva afetar meu cronjob), pgrep cron retorna um número, eu configurei as permissões para meu arquivo de texto , Reiniciei o cron muitas vezes, etc.

Embora eu também tenha tentado definir corretamente meus caminhos de ambiente, suspeito que alguma parte dele ainda esteja errada. Eu tentei várias coisas como adicionar /home na frente de /user , remover o ponto e / ou barra na frente de manage.py e adicionar o caminho de arquivo absoluto na frente do meu comando, tudo sem sucesso.

Embora eu ache que meu suspeito está em como estou definindo meus caminhos, o erro ainda pode estar em outro lugar no meu projeto. Qual é a questão que estou negligenciando, ou como devo diagnosticar isso?

    
por user14678939 13.05.2017 / 06:30

1 resposta

0

Eu encontrei a resposta para o meu problema, e ao fazê-lo também percebi que o meu título para este post é de fato incorreto: crontab estava executando, mas o problema era que os comandos python dentro do meu script cron não eram sendo executado.

A razão para isto foi que o crontab estava sendo executado com uma variável $PATH diferente daquela quando eu executava meus comandos diretamente no console, descrito exatamente como no aceito outras respostas liguei. Meu erro foi que eu compreendi completamente a variável $PATH ; Eu pensei que deveria apontar para o executável no meu projeto, enquanto que na realidade ele contém os caminhos para as pastas que interpretam os scripts (como o interpretador python). Então meus scripts não estavam sendo executados porque o cron não pôde encontrar um interpretador para executá-los. Um erro muito bobo que poderia ter sido evitado lendo a documentação!

Eu não tive absolutamente nenhum problema com o django, o django-cron ou o python.

Resumo: o cron usou um caminho diferente. Adicionado o caminho do ambiente padrão (digite $PATH no console para visualizar).

    
por user14678939 14.05.2017 / 22:10