Crontab не работает скрипт Python, никаких ошибок нет ничего

2244
kkonrad

Уже потратил более 1 часа, чтобы сделать это легко и полностью провалилось: /

Не могу найти, почему этот python не работает на crontab, хотя он отлично работает в командной строке ...

Сценарий (Баш):

#!/bin/bash  touch before_zzz_text.txt # to check if cron works at all  ls > "before_zzz_text.txt" # just to check if I'm in the correct directory  /root/anaconda3/bin/python -V > pv.txt # this is empty! or a white char  touch after_zzz_text.txt # this works new file every minute 

Таким образом, я знаю, что он работает в cron (файлы .txt оба создаются каждую минуту - как cron запускается каждую минуту).

Однако pv.txt пуст ... так выглядит сценарий bash не работает?

В конце я хочу, чтобы в bash-скрипте запускался более сложный скрипт, но я попытался выяснить, почему он не работает, поэтому теперь его проще упростить "/ root / anaconda3 / bin / python -V '

1
Является ли `/ root / anaconda3 / bin / python` файлом сценария python? Это сбивает с толку, так как `python` - это обработчик, который вы хотите запустить. Он начинается с `#! / Usr / bin / python` или аналогичного? Есть ли у него и всех его компонентов каталога разрешения на выполнение всех? Это важно, поскольку среда `crontab` не такая, как для вашего терминала. Если файлы `.txt` были предварительно удалены, с какими разрешениями и именами пользователей / групп они были созданы? AFH 6 лет назад 0
"/ root / anaconda3 / bin / python" - это путь для интерпретатора python. Раньше это был просто "python", но я не могу найти правильный путь env или sth. В любом случае, просто "python -V> pv.txt" тоже не работает. Также нет сообщений об ошибках, файл pv.txt и.т.д пустым ... Должен ли он быть таким? "python -V должен просто дать версию Python, а"> pv.txt "должен сохранить это сообщение в этом файле, который в конце концов становится пустым ... kkonrad 6 лет назад 0
Извините, я был сбит с толку, потому что `/ root / anaconda3 / bin /` маловероятно для интерпретатора. Пустой файл журнала будет создан, если ошибка не позволяет запустить интерпретатор. Добавьте `2> & 1` в конец вызова` python`, чтобы увидеть любые ошибки. AFH 6 лет назад 0
Нет проблем, наконец-то получил исправление! Кажется, отсутствующий MTA на сервере Ubuntu бездельничал. После добавления "2> & 1" в строку Python это работает !!!! kkonrad 6 лет назад 0
Я не осознавал, что версия была написана для `stderr`: как и вы, я предполагал, что она будет на` stdout`, но я только что подтвердил это на своей собственной системе. Рад, что ты в деле. Я думаю, что я отправлю ответ, в интересах других пользователей сайта. AFH 6 лет назад 0
Я до сих пор не уверен, что это так, но как-то это работает после добавления части "2> & 1". Это больше похоже на решение, когда MTA не установлен, я думаю. kkonrad 6 лет назад 0
Вы не должны размещать ответ внутри вопроса. Если вы считаете, что существующего ответа недостаточно, добавьте свой собственный ответ. Используйте [эту ссылку] (https://superuser.com/revisions/1266128/2), если вы хотите скопировать и вставить свой «ответ» в фактический ответ. Kamil Maciorowski 6 лет назад 0

1 ответ на вопрос

3
AFH

После небольшого обсуждения (см. Комментарии выше) кажется, что основная проблема заключается в том, что pythonзаписывает текст своей версии stderr, а не ожидаемый stdout, где ничего не записано, а следовательно, и пустой файл.

В целом, при диагностике crontabпроблем рекомендуется регистрировать ошибки, а также выводить их в тот же или другой файл. Добавляя 2>&1в конец pythonстроки вызова, текст версии появился в pv.txt:

/root/anaconda3/bin/python -V > pv.txt 2>&1 

Похожие вопросы