ubuntu cron scrapy crontab cron-task

ubuntu - Rastreador de Scrapy en el trabajo de Cron



crontab cron-task (7)

Quiero ejecutar mi rastreador de chatarra desde el trabajo cron.

creo el archivo bash getdata.sh donde se encuentra el proyecto scrapy con sus arañas

#!/bin/bash cd /myfolder/crawlers/ scrapy crawl my_spider_name

Mi crontab se ve así, quiero ejecutarlo cada 5 minutos.

*/5 * * * * sh /myfolder/crawlers/getdata.sh

pero no funciona, ¿qué pasa, dónde está mi error?

cuando ejecuto mi archivo bash desde el terminal sh /myfolder/crawlers/getdata.sh funciona bien


¿Su script de shell tiene permiso de ejecución?

por ejemplo, puedes hacer

/myfolder/crawlers/getdata.sh

sin el sh?

Si puede, entonces puede soltar el sh en la línea en cron


Al agregar las siguientes líneas en crontab -e ejecuta mi rastreo desechable a las 5AM todos los días. Esta es una versión ligeramente modificada de la respuesta de Crocs.

PATH=/usr/bin * 5 * * * cd project_folder/project_name/ && scrapy crawl spider_name

Sin configurar $PATH , cron me daría un error "comando no encontrado: desechable". Supongo que esto se debe a que / usr / bin es donde los scripts para ejecutar programas se almacenan en Ubuntu.

Tenga en cuenta que la ruta completa para mi proyecto desechable es /home/user/project_folder/project_name . Ejecuté el comando env en cron y noté que el directorio de trabajo es /home/user . Por lo tanto, me salté /home/user en mi crontab arriba

El registro cron puede ser útil durante la depuración

grep CRON /var/log/syslog


Compruebe dónde está instalado scrapy usando el comando "which scrapy". En mi caso, scrapy se instala en /usr/local/bin .

Abra crontab para editar usando crontab -e .

*/5 * * * * cd /myfolder/path && /usr/local/bin/scrapy crawl spider_name

Deberia de funcionar. Scrapy sale cada 5 minutos.


Otra opción es olvidar el uso de un script de shell y encadenar los dos comandos directamente en el cronjob. Solo asegúrese de que la variable PATH esté establecida antes del primer trabajo cronológico en la lista de crontab. Correr:

crontab -e

Para editar y echar un vistazo. Tengo varios rastreadores desechados que se ejecutan en varias ocasiones. Algunos cada 5 minutos, otros dos veces al día.

PATH=/usr/local/bin */5 * * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_1 * 1,13 * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_2

Todos los trabajos ubicados después de la variable PATH se encontrarán desechados. Aquí el primero se ejecutará cada 5 minutos y el segundo dos veces al día a la 1 am y 1 pm. Encontré esto más fácil de manejar. Si tiene otros binarios para ejecutar, es posible que deba agregar sus ubicaciones a la ruta.


Para cualquier persona que usó pip3 (o similar) para instalar scrapy , aquí hay una solución en línea simple:

*/10 * * * * cd ~/project/path && ~/.local/bin/scrapy crawl something >> ~/crawl.log 2>&1

Reemplazar:

*/10 * * * * con tu patrón cron

~/project/path con la ruta a su proyecto scrapy (donde está su scrapy.cfg )

something con el nombre de la araña (use la scrapy list en su proyecto para averiguarlo)

~/crawl.log con la posición del archivo de registro (en caso de que desee tener registro)


Resolví este problema incluyendo PATH en archivo bash

#!/bin/bash cd /myfolder/crawlers/ PATH=$PATH:/usr/local/bin export PATH scrapy crawl my_spider_name


en mi caso, scrapy está en .local / bin / scrapy, da el camino correcto del raspador y nómbrelo como perfecto.

0 0 * * * cd / home / user / scraper / Folder_of_scriper / && /home/user/.local/bin/scrapy crawl "nombre" >> /home/user/scrapy.log 2> & 1

/home/user/scrapy.log se usa para guardar la salida y el error en scrapy.log para verificar si el programa funciona o no

gracias.