Crontab está rodando com erros

Crontab está rodando com erros

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 syslogeu 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 scrapyarquivo 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 à PATHvariável

OPATHvariá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.

informação relacionada