Crontab se está ejecutando con errores

Crontab se está ejecutando con errores

Estoy intentando ejecutar algunas arañas scrapy en mi servidor con crontab mediante programación. Probé varios comandos y finalmente tengo este crontab que no se ejecuta y tampoco me da ningún error útil.

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

Este crontab no funciona y en el syslogme sale esto:

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)

En el resultado, obtengo esto:

/bin/sh: 1: scrapy: not found

Tengo instalado Scrapy y los comandos funcionan bien de forma independiente.

Respuesta1

Cron por defecto envía un correo al usuario con el resultado de los comandos que ejecuta. Pero, como dice, no hay ningún MAT (Agente de transferencia de correo) instalado, por lo que cron no puede enviar el correo y descarta la salida del comando. Puede redirigir la salida usted mismo, a un archivo o al vacío (/dev/null) cambiando su línea cron a:

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1

o

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1

La segunda posibilidad es instalar un MTA (sendmail, postfix o similar) y configurarlo para manejar el correo local.

O puede asegurarse de que su secuencia de comandos no genere ningún resultado.

Respuesta2

El scrapyarchivo no se puede encontrar en ninguna parte PATH(ver más abajo). Para encontrar dónde está ubicado, use el siguiente comando en su shell interactivo:

which scrapy

Mostrará su ruta absoluta, por ejemplo /usr/local/bin/scrapy. Pon la ruta absoluta al crontab:

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

Respecto a la PATHvariable

ElPATHLa variable se utiliza para buscar programas siempre que no se especifica la ruta exacta en la línea de comando o en un script. Está definido por la configuración del perfil y también por los crontabs. Normalmente se parece a:

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

El ejemplo viene de mi /etc/crontab. Sin embargo, el valor que proporcionó en su crontab parece inusual...

PATH=/root/

¿No estás intentando configurar eldirectorio de trabajo¡¿aquí?!

En cuanto al asunto

El asuntoes la primera línea de muchos guiones. Especifica qué intérprete interpretará el archivo. No tiene sentido en un crontab y deberías eliminarlo. Crontab es undatosarchivo para Cron, no un script.

información relacionada