Crontab está sendo executado com erros

0

Eu estou tentando executar alguns spiders scrapy no meu servidor com o crontab programaticamente. Eu tentei vários comandos e finalmente tenho este crontab que não está rodando e também não está me dando nenhum erro útil.

#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours

Este crontab não está funcionando e no 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 escravo instalado e os comandos estão funcionando bem standalone.

    
por Amirition 13.02.2018 / 10:07

2 respostas

0

O arquivo scrapy não pode ser encontrado em nenhum lugar em PATH (veja abaixo). Para descobrir onde ele está localizado, use o seguinte comando no seu shell interativo:

which scrapy

Ele mostrará seu caminho absoluto, por exemplo %código%. Coloque o caminho absoluto para o crontab:

47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours

Em relação à variável /usr/local/bin/scrapy

A variável PATH é usada para pesquisar programas sempre que você não especificar o caminho exato na linha de comando ou em um script. Ele é definido pelas configurações do perfil e pelos crontabs também. Geralmente parece com:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

O exemplo vem do meu PATH . No entanto, o valor que você forneceu no seu crontab parece incomum…

PATH=/root/

Você não está tentando definir o diretório de trabalho aqui?!

Em relação a shebang

Shebang é a primeira linha de muitos scripts. Especifica qual interpretador deve interpretar o arquivo. Não faz sentido em um crontab e você deve removê-lo. Crontab é um arquivo data para o Cron, não um script.

    
por Melebius 15.02.2018 / 09:08
1

Por padrão, o Cron envia um email para o usuário com a saída dos comandos que ele executa. Mas, como diz, nenhum MAT (Mail Transfer Agent) está instalado, portanto o cron não pode enviar o e-mail e descarta a saída do comando. Você pode redirecionar a saída você mesmo, 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 o correio local.

Ou você pode garantir que seu script não gere nenhuma saída.

    
por Soren A 13.02.2018 / 10:29