Я хочу установить cron для запуска моего scrapy (сценарий python)
Вот как я могу запустить сценарий, и он работает нормально:
ubuntu@ip-1-2-3-4-:cd /home/ubuntu/scrapers/my_scraper/
ubuntu@ip-1-2-3-4-:~/scrapers/my_scraper$ scrapy crawl my_spider
Теперь я пытаюсь запустить указанную выше команду как задание cron:
sudo crontab -e
добавил следующее строчки:
PATH=/home/ubuntu/.local/bin/
35 14 * * * cd /home/ubuntu/scrapers/my_scraper && scrapy crawl my_spider
Это не удалось ... Я также не могу диагностировать проблему ... если я запускаю:
grep CRON /var/log/syslog
, я получаю следующий результат:
Jul 12 06:47:01 ip-1-2-3-4 CRON[1451]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ))
Jul 12 07:17:01 ip-1-2-3-4 CRON[1825]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 08:17:01 ip-1-2-3-4 CRON[1836]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 09:17:01 ip-1-2-3-4 CRON[1849]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 10:17:01 ip-1-2-3-4 CRON[1861]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 11:17:01 ip-1-2-3-4 CRON[1869]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 12:17:01 ip-1-2-3-4 CRON[1878]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 13:17:01 ip-1-2-3-4 CRON[1887]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 14:17:01 ip-1-2-3-4 CRON[1962]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 15:17:01 ip-1-2-3-4 CRON[1970]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 16:17:01 ip-1-2-3-4 CRON[1982]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 17:17:01 ip-1-2-3-4 CRON[1991]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 18:17:01 ip-1-2-3-4 CRON[2002]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 19:17:01 ip-1-2-3-4 CRON[2010]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 20:05:01 ip-1-2-3-4 CRON[2018]: (root) CMD ( test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond)
Jul 12 20:17:01 ip-1-2-3-4 CRON[2022]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 21:17:01 ip-1-2-3-4 CRON[2031]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 22:17:01 ip-1-2-3-4 CRON[2039]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 23:17:01 ip-1-2-3-4 CRON[2047]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 00:17:01 ip-1-2-3-4 CRON[2156]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 01:17:01 ip-1-2-3-4 CRON[2465]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 02:17:01 ip-1-2-3-4 CRON[2549]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 03:17:01 ip-1-2-3-4 CRON[2980]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 04:17:01 ip-1-2-3-4 CRON[3033]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
это странно, потому что самая последняя строка сегодня с 4:00 (14:00 по местному времени), поэтому не знаете, почему тоже не регистрируется ошибка?
Примечание: /home/ubuntu/.local/bin/
- это то место, где scrapy (я нашел это с помощью команды which scrapy
)
Причина, по которой я не получал никакой ошибки, заключалась в том, что мой часовой пояс был неправильным после исправления часового пояса , Я получаю следующую ошибку:
scrapy: not found
Я также пробовал использовать run-my-scraper.sh:
#!/bin/bash
cd /home/ubuntu/scrapers/my_scraper
PATH=$PATH:/usr/bin/python3
export PATH
/home/ubuntu/.local/bin/scrapy crawl my_spider
Я тестировал запуск указанного выше сценария оболочки с консоли, и он работает, затем я добавил это как задание cron, но результат тот же:
sudo crontab -e
добавил следующее:
39 16 * * * ./home/ubuntu/scrapers/shell-scripts/run-my-scraper.sh
Но по-прежнему получаю scrapy: not found error.
Возникла проблема с моим часовым поясом ... мой сервер был настроен на UTC, и я устанавливал задание cron по австралийскому времени, поэтому я не смог увидеть ни одного сообщения об ошибке.
После исправления часового пояса у меня сработало следующее (благодаря комментарию @Stephen Boston, который указал, что мне нужно использовать полный путь для scrapy):
crontab -e
PATH=/usr/local/bin
56 18 * * * cd /home/ubuntu/scrapers/my_scraper && /home/ubuntu/.local/bin/scrapy crawl my_spider
in newscript.sh
#!/bin/bash
su - ubuntu OR set PATH= if necessary... since you made the cronjob as sudo
cd /home/ubuntu/scrapers/my_scraper/
scrapy crawl my_spider
the part you said worked already ^
in crontab
35 14 * * * /home/blahblah/newscript.sh
...bottom line, make a working script, call the script in the cron job... make sure it's executable.
35 14 * * * cd /home/ubuntu/scrapers/my_scraper && scrapy crawl my_spider
maybe try to get rid of the cd command.