Por que meu cron job não funciona?

0

Aqui está meu trabalho no cron:

*/10 * * * * export DISPLAY=:99  #this is to open a port by Xvfb
*/10 * * * * python Crawler.py   #this file will use a selenium to script the data through firefox browser. 

Atualmente estou usando o aws EC2 Ubuntu OS para executar este trabalho. Se eu digitar este comando manualmente através do terminal, ele funcionará bem. Todos os resultados de rastreamento salvos no caminho correto do diretório. Mas quando eu uso o cron job para executar, nenhum arquivo é gerado. E eu vou através de / var / log / syslog para ver o log de tarefas cron, ele afirma que a tarefa cron já foi executada. Então, qual é a razão para causar esse problema?

Oct 26 02:00:01 ip-172-31-28-165 CRON[6415]: (ubuntu) CMD (run_crawler)
Oct 26 02:17:01 ip-172-31-28-165 CRON[6422]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Oct 26 03:17:01 ip-172-31-28-165 CRON[6459]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Oct 26 04:00:01 ip-172-31-28-165 CRON[6473]: (ubuntu) CMD (run_crawler)
Oct 26 04:17:01 ip-172-31-28-165 CRON[6519]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Oct 26 05:17:01 ip-172-31-28-165 CRON[6549]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Oct 26 06:00:01 ip-172-31-28-165 CRON[6577]: (ubuntu) CMD (run_crawler)
Oct 26 06:17:01 ip-172-31-28-165 CRON[6763]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
    
por bobo123 26.10.2015 / 08:37

1 resposta

4

Desculpe, mas esses dois comandos são executados separadamente. O

*/10 * * * * export DISPLAY=:99 

não sabe sobre

*/10 * * * * python Crawler.py 

Você precisa colocar o primeiro comando no segundo comando se o "Crawler.py" precisar de um DISPLAY.

Além disso: também é melhor incluir os caminhos na frente do "python" e do "Crawler.py".

Eu diria que precisa ser algo assim ...

*/10 * * * * DISPLAY:99 && /usr/bin/python /usr/bin/local/Crawler.py 

se o python estiver em /usr/bin/ e seu script em /usr/bin/local/ .

Existem métodos melhores:

Use xvfbwrapper . É um wrapper independente que você pode usar como gerenciador de contexto:

    from xvfbwrapper import Xvfb
    with Xvfb() as xvfb:
         # rest of your script goes here (start/stop etc)
  • Este tópico em stackoverflow tem mais algumas informações sobre como usar " selênio ".
  • Também interessante : Plugin Seleniumhq
por Rinzwind 26.10.2015 / 08:51