Crontab работает с ошибками

Crontab работает с ошибками

Я пытаюсь запустить несколько 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, а не скрипт.

Связанный контент