У меня есть задание cron, записанное для root (я пишу в журнал в / var / log
, поэтому требуются права root). Проблема в том, что иногда это работает, а иногда нет.
Задача cron - просто вызвать скрипт python в моем домашнем каталоге, который затем сделает всю тяжелую работу.
Я настроил выполнение задания посреди ночи, чтобы оно не мешало тому, что я делаю, и чтобы API, с которым он взаимодействует, с меньшей вероятностью изменился (API обновляется в течение дня) .
Но каждое утро я проверяю журналы и получаю следующую ошибку:
python3: can't open file '/home/myUser/path/to/the/main.py':
[Errno 2] No such file or directory
Мой ответ на это - изменить время в crontab на несколько минут сверх времени, когда я проверяю журналы, подождать несколько минут и файл запускается. Единственное , что я меняю, - это время, и внезапно это срабатывает.
Итак, я точно знаю, что файл существует.
Я пробовал различные варианты времени ночью ( 30 23 * * *, 01 01 * * *, 10 02 * * *
), ни один из них не работал, но всякий раз, когда я устанавливал его на 2 через несколько минут после того, как я проверю утром, все в порядке.
Вот текущий crontab:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
01 01 * * * python3 /home/myUser/path/to/the/main.py >> /var/log/thisjobs.log 2>&1
Также стоит упомянуть, что после этого задания есть дополнительный перевод строки (я слышал, что это необходимо).
Кто-нибудь видел это раньше? Могу ли я попытаться найти этот файл без необходимости каждый раз вручную изменять скрипт?
РЕДАКТИРОВАТЬ: вот мой результат env
для cron
:
LANGUAGE=en_GB:en
HOME=/root
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/root
Также подумал, что упомянул, что безрезультатно пытался использовать следующую команду (после указанного времени) (та же ошибка, но только с main.py
вместо полного пути):
cd /home/myUser/path/to/the; python3 main.py
Оказывается, что это было ответом: Крон перестал работать ночью
, я выполняю это на своем сервере (который я только ssh
в) за ночь. Так наличие зашифрованного домашнего диска означало, что, когда я не зарегистрирован, ничто ни для чего не доступно за пределами home
, включая cron
.
я переместил свой сценарий в /usr/local/bin
(может быть лучшее место для помещения его, но я не чувствовал, что что-либо еще подходило), который случайно означал, что я могу назвать его без любого пути вообще (предполагающий, что Вы установили PATH
переменная).
Теперь все работает, как это должно.