Ответ 1
Я решил эту проблему, включая PATH, в файл bash
#!/bin/bash
cd /myfolder/crawlers/
PATH=$PATH:/usr/local/bin
export PATH
scrapy crawl my_spider_name
Я хочу выполнить свой сканирующий искатель из задания cron.
я создаю файл bash getdata.sh, где находится проект scrapy с его пауками
#!/bin/bash
cd /myfolder/crawlers/
scrapy crawl my_spider_name
Мой crontab выглядит так, я хочу выполнить его каждые 5 минут
*/5 * * * * sh /myfolder/crawlers/getdata.sh
но это не работает, что случилось, где моя ошибка?
когда я выполняю мой файл bash с терминала sh/myfolder/crawlers/getdata.sh, он отлично работает
Я решил эту проблему, включая PATH, в файл bash
#!/bin/bash
cd /myfolder/crawlers/
PATH=$PATH:/usr/local/bin
export PATH
scrapy crawl my_spider_name
Добавление следующих строк в crontab -e
выполняется мой обход scrapy в 5 утра каждый день. Это немного измененная версия ответа crocs
PATH=/usr/bin
* 5 * * * cd project_folder/project_name/ && scrapy crawl spider_name
Без настройки $PATH
, cron дал бы мне ошибку "команда не найдена: scrapy". Я предполагаю, что это потому, что /usr/bin - это где скрипты для запуска программ хранятся в Ubuntu.
Обратите внимание, что полный путь для моего проекта scrapy - /home/user/project_folder/project_name
. Я запустил команду env в cron и заметил, что рабочий каталог /home/user
. Поэтому я пропустил /home/user
в моем crontab выше
Журнал cron может быть полезен при отладке
grep CRON /var/log/syslog
Другой вариант - забыть использовать оболочку script и объединить две команды вместе непосредственно в cronjob. Просто убедитесь, что переменная PATH задана перед первой cropjob scrapy в списке crontab. Выполнить:
crontab -e
для редактирования и просмотра. У меня есть несколько сканирующих сканеров, которые работают в разное время. Каждые 5 минут, другие два раза в день.
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
Все задания, расположенные после переменной PATH, будут найдены. Здесь первый будет проходить каждые 5 минут, а второй - два раза в день в 1:00 и 13:00. Мне было легче справиться. Если у вас есть другие исполняемые файлы, вам может потребоваться добавить их места в путь.
Для тех, кто использовал pip3
(или аналогичный) для установки scrapy
, вот простое встроенное решение:
*/10 * * * * cd ~/project/path && ~/.local/bin/scrapy crawl something >> ~/crawl.log 2>&1
Заменить:
*/10 * * * *
с вашим шаблоном cron
~/project/path
с указанием пути к вашему проекту scrapy (где находится ваш scrapy.cfg
)
something
с именем паука (используйте scrapy list
в вашем проекте, чтобы узнать)
~/crawl.log
с позицией вашего файла журнала (в случае, если вы хотите вести журнал)
Проверьте, где установлена scrapy, используя команду "which scrapy". В моем случае scrapy устанавливается в /usr/local/bin
.
Откройте crontab для редактирования с помощью crontab -e
. PATH=$PATH: /usr/local/bin export PATH */5 * * * * cd/myfolder/path && scrapy crawl spider_name
Он должен работать. Scrapy выполняется каждые 5 минут.
имеет ли ваша оболочка script разрешение на выполнение?
например. можете ли вы сделать
/myfolder/crawlers/getdata.sh
без sh?
если вы можете затем удалить sh в строке в cron
в моем случае scrapy находится в .local/bin/scrapy, укажите правильный путь скребка и назовите его work perfect
0 0 * * * cd/home/user/scraper/Folder_of_scriper/&&/home/user/.local/bin/scrapy crawl "name" >>/home/user/scrapy.log 2> & 1
/home/user/scrapy.log используется для сохранения вывода и ошибок в scrapy.log для проверки работы программы или нет
благодарю вас.