Рейтинг:0

Crontab не запускает скрипт Python. Пробовал несколько исправлений.

флаг ve

Привет всем и спасибо за чтение я буду обсуждать ниже.

У меня есть простой скрипт на Python, который печатает случайный факт из Reddit в терминал, я тестирую воды терминала, изучая Python.

Я попытался изменить свои права доступа к каталогу /usr/bin/. Нет успеха

Я создал новый скрипт reddit.py внутри каталога /usr/bin, поскольку я читал в другом месте, что crontab запускается только из своего домашнего каталога, и если в файле crontab указаны оба пути, это должно решить проблему его запуска. Опять безуспешно.

Я дал себе полные права на чтение, запись и выполнение, кроме «proc» и «sys», которые были отклонены.

Он запустится, если я напишу путь в терминале и напечатаю случайный факт из TIL с Reddit.

Не буду запускать crontab, любая дополнительная информация, которую кто-либо может предоставить, будет принята с благодарностью, и если вы можете предоставить какие-либо упрощенные детали, поскольку я только начал с этого и медленно, но верно разбираюсь во всем. Еще раз большое спасибо. Я предоставлю копию сценария ниже.

Я использую Debian 10 на хромбуке AMD 64.

#! /usr/bin/окружение Python
запросы на импорт
импортировать json 
 
subreddit = 'сегодняшнее обучение'
количество = 1
timeframe = 'день' #час, день, неделя, месяц, год, все
listing = 'random' # спорный, лучший, горячий, новый, случайный, восходящий, топ
 
def get_reddit (субреддит, количество):
    пытаться:
        base_url = f'https://www.reddit.com/r/{subreddit}/{listing}.json?count={count}&t={timeframe}'
        request = request.get(base_url, headers = {'User-agent': 'ваш бот'})
    кроме:
        print('Произошла ошибка')
    вернуть запрос.json()
 
top_post = get_reddit (субреддит, количество)
 
если листинг != 'случайный':
    title = top_post['данные']['дети'][0]['данные']['название']
    url = top_post['данные']['дети'][0]['данные']['url']
еще:
    title = top_post[0]['data']['children'][0]['data']['title']
    url = top_post[0]['данные']['дети'][0]['данные']['url']
 
 
печать (f'{название}\n{url}')

Кронтаб-файл:

*/5 * * * * /usr/bin/python /usr/bin/reddit.py >dev/null 2>&1

Спасибо, я пытался решить эту проблему в течение добрых 12 часов и до сих пор безуспешно. Тем не менее, это помогает мне освоиться с окружающей средой и командами! Итак, серебряные накладки =)

codlord avatar
флаг ru
Это должно быть `/dev/null`, если вы хотите перенаправить сюда вывод. Но почему бы не перенаправить в файл журнала, и тогда файл журнала будет содержать сообщения/ошибки из вашей команды/скрипта python. Если вы не получаете каких-либо значимых сообщений/ошибок, добавьте их в свой сценарий, чтобы вы могли видеть, что он делает и где он идет не так.
флаг hr
* "выводит случайный факт из Reddit в терминал" * cron не знает ни о каких терминалах, которые могут быть открыты, поэтому любой вывод будет либо отправлен по почте владельцу crontab, либо отброшен.
Рейтинг:1
флаг in

Крайне плохая идея изменять права доступа к / или /usr/bin или размещать файлы в этих каталогах. Если вы собираетесь установить подобную локальную программу на системном уровне, она должна находиться в /usr/local/bin

Также нет необходимости делать это, чтобы выполнить то, что вы пытаетесь выполнить, это не обязательно должно быть в системном каталоге для запуска из cron, особенно cron пользователя. Вы должны иметь возможность поместить этот файл в свой домашний каталог и просто указать полный путь к нему, как вы уже делаете в записи crontab.

Обычно cron сообщает вам об ошибках, когда что-то не работает. Однако у вас может не быть установлена ​​почта, и вы все равно отключаете ведение журнала ошибок с помощью >dev/null 2>&1

Скорее всего, если вы исправите эти вещи и зафиксируете ошибку, которая препятствует запуску вашего скрипта, вы обнаружите, в чем настоящая проблема. (Если вы не можете понять это из ошибок после их получения, добавьте их к своему вопросу.)

Mentalist avatar
флаг ve
Спасибо за вашу помощь, это очень информативно, я не полностью осознавал, что >dev/null 2>&1 отключено ведение журнала ошибок. Я нашел его как часть исправления проблемы с crontab, это было частью #!/usr/ добавление bin/env python.
Mentalist avatar
флаг ve
Извините, что звучит как полный нуб, журналы ошибок - мне придется установить почтовый клиент/проверить, установлен ли он? Как только это будет сделано, я могу удалить эту строку из сценария и проверить свою почту на наличие журнала ошибок из файла crontab. Это автоматически, как только я удалю код из сценария, и он отправит файл журнала на мой почтовый адрес, как только я все пойму что из? еще раз спасибо за вашу помощь, это очень ценится.
Mentalist avatar
флаг ve
Я уточнил, что у меня установлена ​​Почта, было несколько журналов ошибок, если у вас есть запланированная задача, запускаемая каждые 2 минуты, ожидайте несколько писем, ха-ха, спасибо за это, я пройдусь по ней отсюда и вернусь! Кажется, не удалось найти python, поэтому мы попытаемся исправить несколько ошибок, еще раз спасибо, ребята!
user10489 avatar
флаг in
Удачи и счастливой охоты!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.