Терминал Linux #7.2 - crontab: как запускать Python-скрипт по расписанию
HTML-код
- Опубликовано: 25 авг 2024
- Мои курсы:
Boosty:
boosty.to/omol...
Patreon:
/ karty-vsekh-41011404
Как выполнять Python-скрипт по расписанию с помощью crontab?
Пишем парсер сайта Банка России (Центрального банка), который берет данные о курсе доллара, а затем отправляет нам (пользователем) системное сообщение.
Назначаем этот скрипт на исполнение по расписанию с помощью crontab.
Дико удобно :)
** ИСХОДНЫЙ КОД **
Основных проектов доступен в Patreon:
/ iskhodnyi-kod-26640469
***
------
🔷 Для донатов. Всегда очень признателен за это:
www.donational...
------
Это вторая часть. Посвящена именно назначению выполнения скрипта crontab'у. Ну и про парсер немножко есть.
• Терминал Linux #7.1 - ... - первая часть скринкаста.
Установка библиотек:
sudo pip3 install requests beautifulsoup4 lxml
Команды:
crontab -l - список имеющихся заданий
crontab -e - редактирование таблицы заданий
crontab -r - удаление всех имеющихся заданий
Алгоритм действий:
1. Написать скрипт
2. Прописать в нем первой строкой shebang: #!/usr/bin/python3
3. Дать скрипту права на исполнение:
sudo chmod a+x script.py
4. Прописать в crontab путь до скрипта и вызвать на исполнение скрипт.
Вариантов может быть несколько, я привожу один из них.
5. Экспорт переменной DISPLAY связан с особенностями окружения crontab - оно отличается от общесистемного профиля.
Для тестов можно использовать то окружение, которое имеет crontab:
env -i /bin/bash --noprofile --norc
6. ...
7. PROFIT
Связанные видео:
• Парсинг сайтов на Pyth... - приемы работы с BeautifulSoup
• Уроки Python casts # 2... - про переменные окружения
• Терминал Linux #4 - Al... - про псевдонимы команд (aliases)
• Уроки Python casts #4 ... - что такое if _name_ == '__main__'
• Практический курс парс... - видос курса по парсингу
-----
Все видео серии:
Терминал Linux #1 - навигация по файловой системе
• Терминал Linux #1 - на...
Терминал Linux #2 - Операции с файлами и папками
• Терминал Linux #2 - Оп...
Терминал Linux #3 - Команда Grep: поиск по файлам и папкам
• Терминал Linux #3 - Ко...
Терминал Linux #4 - Aliases: как упростить работу в терминале
• Терминал Linux #4 - Al...
Терминал Linux #5 - Как установить MySQL на Ubuntu/Mint
• Терминал Linux #5 - Ка...
Терминал Linux #6 - Как установить PostgreSQL на Ubuntu/Mint
• Терминал Linux #6 - Ка...
Терминал Linux #7.1 - crontab: запуск задач по расписанию
• Терминал Linux #7.1 - ...
Терминал Linux #7.2 - crontab: как запускать Python-скрипт по расписанию
• Терминал Linux #7.2 - ...
Единственное что, эта стрелочка может быть и вниз, тогда сплит не сработает, но это так, к словцу.
Спасибон.Только не бросай канал, очень помогают твои скринКасты.
Спасибо большое, не знал о Display, теперь всё заработало
Ваше видео помогло решить задачу. Спасибо!
Спасибо! Как всегда всё интересно и доходчиво разъяснено.
смотрю в марте 2022, плачу над курсом
Четкий парень и четкие уроки
спасибо за видео, как всегда огонь !
Для новичка все понятно, спасибо!
Спасибо за tutorial. +
Огромное спасибо!!
Кто бы мог подумать но из этого видоса я узнал как подключившись через ssh запустить что-то на экране пациента)
Как запускать скрипт через cron, если стоит виртуальное окружение venv?
Спасибо. Сам недавно долго мучался с окружением cron при запуске скрипта python. Даже если запускать скрипт по абсолютным путям, то скрипт не отрабатывал из-за того, что при импорте своих модулей и работе с файлами, лежащими в каталоге скрипта, оный их не мог найти. Заработала связка команд * * * * * * cd /path/to/script && scriptname.py
Интересное применение. Пытаюсь запустить notify-send на VPS Ubuntu 20 и получаю Cannot autolaunch D-Bus without X11 $DISPLAY. Что за фигня. Дисплей нужен?
Спасибо! Жаль сразу не увидел это видео, не знал про права..
Спасибо.
спасибо
два видео глянул, как работать с crontab не понял.
Доброй ночи Олег! Спасибо за видео: классно объясняешь. Такой вопрос: при установке любого модуля через pip он постоянно выводит строки с рекомендацией по его апдейту. Оно нужно? Что то нужнее, интереснее удобнее будет после обновления - или наоборот может поломать что то из работающих уже вещей? Есть смысл обновить?
Ну, обновите. Я обновил и все нормально. Работает как и раньше
Олег, в чем принципиальная разница subprocess.check_output() и os.system() ? Помимо того, что первый возвращает stdin
Ваш скрипт не всегда будет работать. Стрелочка вверх не всегда будет стрелочкой вверх. Лучше было бы использовать тот самый пробел, который не пробел. Тогда и направление курса сразу видели бы в уведомлении.
да не важно все это.
Это просто демонстрация принципа не более.
✔
Поделитесь ссылкой или опишите как запускать файлы *.py в Atom Runner в правой части, спасибо!
необходимо установить пакет Atom Runner в самом атоме. Вкладка "Edit" >> "Preferences">>"+Install" и там найти "Atom-runner" и установить. Потом через сочетание "Alt+R" можно выполнить скрипт.
забыли про - ord("символ")
не уверен, что это помогло бы при сплите строки
ну там когда код символа посмотреть нужно было
ord() возвращает совсем не тот код
Я бы смотрел в hex выводе. Например echo '↑' | hd говорит, что стрелка кодируется байтами e2 86 91 0a (0a отбрасываем, т.к. это перевод строки). Т.е. в Питоне это было бы '\xe2\x86\x91'.
как я понял стрелка вниз означает падение курса, т.е. при повышении курса мы не сможем просплитить. сделал вот так - result=t[-8:] есть ли в этом ошибка?
напомните, плиз, какую строку вы не можете просплитить?
@@zaemiel переменная t вы ее просплитили по стрелочке. А если это будет не стрелка вверх а стрелка вниз
проблема в том, что я не помню какое значение было у переменной t.
Все мои видео - это демонстрация принципа. Не нравится стрелочка, как критерий деления? Придумайте другой. Но ваш код выглядит ужасно. Скорее всего есть другой, более очевидный путь.
@@zaemiel так я по вашим видео учусь) поэтому код ужасен) Если серьезно все очень доходчиво и смотрю все ваши видео.
Мы с сайта цетробанка получаем строку "курс доллара +стрелочка +значение" вы предлагаете сплитить по стрелочке , а я пытаюсь сказать, что стрелочка может быть как вверх так и вниз. В следующий раз просто промолчу если вы это расцениваете как оскорбление
я имею в виду, что конструкция:
result=t[-8:]
чудовищна.
Вы так и не ответили на мой вопрос. Какая там была строка... Пришлось лезть и смотреть. Строка вида:
"руб. ^63,123"
Элементарно сплитится по пробелу. Затем берется первый элемент списка и из него берутся все символы кроме первого.
result = s.split(' ')[-1][1:]
В видео я просто показал, как можно узнать код спецсимвола. Ужасно.
А у меня после использования сплит ошибка и не могу понять что не так UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
p-notes.ru/
Там есть раздел FAQ внизу и там я объяснил как мог, что с этим можно сделать.
Кстати, какой ОС вы пользуетесь?
Спасибо за подсказку, посмотрю и попробую исправить. Изначально виндовс 10 но промучился с этой ошибкой и установил линукс Убунту 16.04 в итоге ошибка осталась и не могу понять как ее решить.
Что вам команда locale выводит?
Вот
LANG=ru_UA.UTF-8
LANGUAGE=ru_UA:ru
LC_CTYPE="ru_UA.UTF-8"
LC_NUMERIC="ru_UA.UTF-8"
LC_TIME="ru_UA.UTF-8"
LC_COLLATE="ru_UA.UTF-8"
LC_MONETARY="ru_UA.UTF-8"
LC_MESSAGES="ru_UA.UTF-8"
LC_PAPER="ru_UA.UTF-8"
LC_NAME="ru_UA.UTF-8"
LC_ADDRESS="ru_UA.UTF-8"
LC_TELEPHONE="ru_UA.UTF-8"
LC_MEASUREMENT="ru_UA.UTF-8"
LC_IDENTIFICATION="ru_UA.UTF-8"
LC_ALL=
ммм... локаль выглядит нормально.
Попробуйте добавить в самое начала файла .bashrc
вот эту строку:
export LC_ALL="ru_UA.UTF-8"
.bashrc находятся в вашей домашней папке. Это скрытый файл. Чтобы его подредактировать можно воспользоваться редактором nano:
sudo nano ~/.bashrc
не забудьте потом перезапустить .bashrc
source ~/.bashrc
Не хило...
огонь беспорно