Задания cron выполняются с домашним каталогом пользователя в качестве рабочего каталога. Это означает, что все ссылки на файлы, которые не указывают явный путь (или используют поиск через что-то вроде $PATH
), будут находиться в вашем домашнем каталоге.
Указание пути к сценарию не меняет его при все. Я подозреваю, что когда вы тестируете скрипт в интерактивном режиме, вы делаете что-то вроде этого:
cd /home/pi/Code/Python/TwitterBots/UArticleBot
./TweetRandom.sh
Попробуйте сделать это вместо этого и посмотрите, что он делает:
cd ~
/home/pi/Code/Python/TwitterBots/UArticleBot/TweetRandom.sh
Я думаю, это будет сделать то же самое, что и при запуске из задания cron: создайте файл Wikipedia:Unusual_articles
в вашем домашнем каталоге, а затем получите ошибки, потому что он не может найти ни сценарий parser.py
, ни tweeter.py
.
Одним из способов решения этой проблемы является использование явных путей для всего (что, вероятно, также потребует изменения сценариев python, поскольку они, вероятно, предполагают, что файл Wikipedia находится в текущем каталоге).
Другой вариант - поместить ваш скрипт cd
в свой каталог, прежде чем делать что-либо еще. В общем, это может быть немного сложно (см. BashFAQ # 28 ), но это должно работать для вашего случая:
#!/bin/bash
cd "$(dirname "$BASH_SOURCE")" || {
echo "Error cd'ing to script directory" >&2
exit 1
}
... rest of script here
Кстати, при поиске и устранении неполадок заданий cron, это невероятно полезно для захвата ошибки и другая информация, которую они печатают во время работы. Cron пытается позаботиться об этом за вас, но это не всегда работает хорошо. Вы можете направить вывод в файл журнала, добавив перенаправление в конец записи cron:
0 12 * * * /home/pi/Code/Python/TwitterBots/UArticleBot/TweetRandom.sh >>/tmp/tweetjob.log 2>&1