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.