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 syslog
me 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 scrapy
archivo 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 PATH
variable
ElPATH
La 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.