Я пытаюсь выполнить некоторых пестрых пауков на своем сервере с 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
не может быть найден нигде в PATH
(см. Ниже). Чтобы найти, где он находится, используйте следующую команду в вашей интерактивной оболочке:
which scrapy
Он покажет свой абсолютный путь, например, /usr/local/bin/scrapy
. Укажите абсолютный путь к crontab:
47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours
PATH
Переменная PATH
используется для поиска программ, когда вы не Точный путь указывается в командной строке или в скрипте. Это определяется настройками профиля и crontabs тоже. Обычно это выглядит так:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Пример взят из моего /etc/crontab
. Однако значение, которое вы указали в вашем crontab, выглядит необычно…
PATH=/root/
Не пытаетесь ли вы установить здесь рабочий каталог ?!
Шебанг - первая строка многих сценариев. Он указывает, какой интерпретатор должен интерпретировать файл. Это не имеет смысла в crontab, и вы должны удалить его. Crontab - это файл данных для Cron, а не скрипт.
Крон по умолчанию отправляет почту пользователю с выводом команд, которые это выполняет. Но, как это говорит, никакая ЦИНОВКА (Агент Передачи почты) не установлена, таким образом, крон не может отправить почту и отбрасывает вывод команды. Можно перенаправить вывод сами в файл или в пустоту (/dev/null) путем изменения строки крона на:
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, постфикс или подобный) - и настроить его для обработки местной почты.
Или Вы могли удостовериться, что Ваш сценарий не генерирует вывода.