Я пытаюсь запустить несколько Scrapy Spiders на моем сервере с помощью crontab программно. Я попробовал несколько команд и в итоге получил этот crontab, который не работает и не выдает мне никакой полезной ошибки.
#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours
Этот crontab не работает, и syslog
я получаю следующее:
Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)
На выходе я получаю следующее:
/bin/sh: 1: scrapy: not found
У меня установлен Scrapy, и команды работают нормально по отдельности.
решение1
Cron по умолчанию отправляет пользователю письмо с выводом команд, которые он запускает. Но, как он говорит, MAT (Mail Transfer Agent) не установлен, поэтому cron не может отправлять почту и отбрасывает вывод команды. Вы можете перенаправить вывод самостоятельно, в файл или в пустоту (/dev/null), изменив строку cron на:
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1
или
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1
Вторая возможность — установить MTA (sendmail, postfix или аналогичный) и настроить его для обработки локальной почты.
Или вы можете убедиться, что ваш скрипт не генерирует никаких выходных данных.
решение2
Файл scrapy
не может быть найден нигде в PATH
(см. ниже). Чтобы узнать, где он находится, используйте следующую команду в вашей интерактивной оболочке:
which scrapy
Он покажет его абсолютный путь, например /usr/local/bin/scrapy
. Укажите абсолютный путь к crontab:
47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours
Относительно PATH
переменной
ThePATH
переменная используется для поиска программ, когда вы не указываете точный путь в командной строке или в скрипте. Она определяется настройками профиля и crontab-ами. Обычно она выглядит так:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Пример взят из моего /etc/crontab
. Однако значение, которое вы указали в вашем crontab, выглядит необычно…
PATH=/root/
Разве вы не пытаетесь установитьрабочий каталогздесь?!
Относительно шебанга
Шебангявляется первой строкой многих скриптов. Она определяет, какой интерпретатор должен интерпретировать файл. Она не имеет смысла в crontab, и ее следует удалить. Crontab — этоданныефайл для Cron, а не скрипт.