Искатель скрипа в работе Cron - программирование
Подтвердить что ты не робот

Искатель скрипа в работе Cron

Я хочу выполнить свой сканирующий искатель из задания 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, он отлично работает

4b9b3361

Ответ 1

Я решил эту проблему, включая PATH, в файл bash

#!/bin/bash

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

Ответ 2

Добавление следующих строк в 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

Ответ 3

Другой вариант - забыть использовать оболочку 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. Мне было легче справиться. Если у вас есть другие исполняемые файлы, вам может потребоваться добавить их места в путь.

Ответ 4

Для тех, кто использовал 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 с позицией вашего файла журнала (в случае, если вы хотите вести журнал)

Ответ 5

Проверьте, где установлена 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 минут.

Ответ 6

имеет ли ваша оболочка script разрешение на выполнение?

например. можете ли вы сделать

  /myfolder/crawlers/getdata.sh 

без sh?

если вы можете затем удалить sh в строке в cron

Ответ 7

в моем случае 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 для проверки работы программы или нет

благодарю вас.