Estou tentando executar alguns spiders scrapy em meu servidor com crontab programaticamente. Tentei vários comandos e finalmente encontrei este crontab que não está funcionando e também não está apresentando nenhum erro útil.
#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours
Este crontab não está funcionando e syslog
eu recebo isto:
Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)
Na saída, estou recebendo isso:
/bin/sh: 1: scrapy: not found
Eu tenho o scrapy instalado e os comandos estão funcionando bem de forma independente.
Responder1
Por padrão, o Cron envia um email ao usuário com a saída dos comandos que ele executa. Mas, como diz, nenhum MAT (Mail Transfer Agent) está instalado, então o cron não pode enviar o email e descarta a saída do comando. Você mesmo pode redirecionar a saída para um arquivo ou para o void (/dev/null) alterando sua linha cron para:
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1
ou
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1
A segunda possibilidade é instalar um MTA (sendmail, postfix ou similar) - e configurá-lo para lidar com correio local.
Ou você pode garantir que seu script não gere nenhuma saída.
Responder2
O scrapy
arquivo não pode ser encontrado em nenhum lugar PATH
(veja abaixo). Para descobrir onde ele está localizado, use o seguinte comando em seu shell interativo:
which scrapy
Ele mostrará seu caminho absoluto, por exemplo /usr/local/bin/scrapy
. Coloque o caminho absoluto para o crontab:
47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours
Em relação à PATH
variável
OPATH
variável é usada para procurar programas sempre que você não especifica o caminho exato na linha de comando ou em um script. É definido pelas configurações do perfil e também pelos crontabs. Normalmente se parece com:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
O exemplo vem do meu /etc/crontab
. No entanto, o valor que você forneceu em seu crontab parece incomum…
PATH=/root/
Você não está tentando definir odiretório de trabalhoaqui?!
Em relação a Shebang
Shebangé a primeira linha de muitos scripts. Especifica qual intérprete deve interpretar o arquivo. Não faz sentido em um crontab e você deve removê-lo. Crontab é umdadosarquivo para Cron, não um script.