Терминал 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 - ...

Комментарии • 68

  • @nickolayfetlistov4416
    @nickolayfetlistov4416 4 года назад +11

    Единственное что, эта стрелочка может быть и вниз, тогда сплит не сработает, но это так, к словцу.

  • @igorkulibaba7287
    @igorkulibaba7287 6 лет назад +6

    Спасибон.Только не бросай канал, очень помогают твои скринКасты.

  • @young_it9861
    @young_it9861 3 года назад

    Спасибо большое, не знал о Display, теперь всё заработало

  • @user-fp8vv2qt2c
    @user-fp8vv2qt2c 4 года назад

    Ваше видео помогло решить задачу. Спасибо!

  • @anton-pavlov
    @anton-pavlov 6 лет назад

    Спасибо! Как всегда всё интересно и доходчиво разъяснено.

  • @Clamator
    @Clamator 2 года назад

    смотрю в марте 2022, плачу над курсом

  • @alwayssmile3125
    @alwayssmile3125 6 лет назад

    Четкий парень и четкие уроки

  • @esthetik_life
    @esthetik_life 4 года назад

    спасибо за видео, как всегда огонь !

  • @ivarbond5752
    @ivarbond5752 4 года назад

    Для новичка все понятно, спасибо!

  • @syrgakmv7992
    @syrgakmv7992 3 года назад

    Спасибо за tutorial. +

  • @no-qm1kn
    @no-qm1kn 4 года назад

    Огромное спасибо!!

  • @user-js8np6yg6f
    @user-js8np6yg6f 5 лет назад

    Кто бы мог подумать но из этого видоса я узнал как подключившись через ssh запустить что-то на экране пациента)

  • @user-dn9yk7hx1z
    @user-dn9yk7hx1z 4 года назад +2

    Как запускать скрипт через cron, если стоит виртуальное окружение venv?

  • @aleksbotler5358
    @aleksbotler5358 4 года назад

    Спасибо. Сам недавно долго мучался с окружением cron при запуске скрипта python. Даже если запускать скрипт по абсолютным путям, то скрипт не отрабатывал из-за того, что при импорте своих модулей и работе с файлами, лежащими в каталоге скрипта, оный их не мог найти. Заработала связка команд * * * * * * cd /path/to/script && scriptname.py

  • @Storks40
    @Storks40 Год назад

    Интересное применение. Пытаюсь запустить notify-send на VPS Ubuntu 20 и получаю Cannot autolaunch D-Bus without X11 $DISPLAY. Что за фигня. Дисплей нужен?

  • @nordost8
    @nordost8 5 лет назад

    Спасибо! Жаль сразу не увидел это видео, не знал про права..

  • @sainco3036
    @sainco3036 6 лет назад

    Спасибо.

  • @ivanfedorov7934
    @ivanfedorov7934 4 года назад

    спасибо

  • @arbiatagaev2380
    @arbiatagaev2380 3 месяца назад

    два видео глянул, как работать с crontab не понял.

  • @user-fr5oi4qp2s
    @user-fr5oi4qp2s 6 лет назад

    Доброй ночи Олег! Спасибо за видео: классно объясняешь. Такой вопрос: при установке любого модуля через pip он постоянно выводит строки с рекомендацией по его апдейту. Оно нужно? Что то нужнее, интереснее удобнее будет после обновления - или наоборот может поломать что то из работающих уже вещей? Есть смысл обновить?

    • @zaemiel
      @zaemiel  6 лет назад

      Ну, обновите. Я обновил и все нормально. Работает как и раньше

  • @yodapunishes
    @yodapunishes 4 года назад

    Олег, в чем принципиальная разница subprocess.check_output() и os.system() ? Помимо того, что первый возвращает stdin

  • @ruwebstyle
    @ruwebstyle 5 лет назад +1

    Ваш скрипт не всегда будет работать. Стрелочка вверх не всегда будет стрелочкой вверх. Лучше было бы использовать тот самый пробел, который не пробел. Тогда и направление курса сразу видели бы в уведомлении.

    • @zaemiel
      @zaemiel  5 лет назад +3

      да не важно все это.
      Это просто демонстрация принципа не более.

  • @alexanderpadalka5708
    @alexanderpadalka5708 3 года назад

  • @woodenstorm
    @woodenstorm 3 года назад

    Поделитесь ссылкой или опишите как запускать файлы *.py в Atom Runner в правой части, спасибо!

    • @nikitashebin1990
      @nikitashebin1990 3 года назад +1

      необходимо установить пакет Atom Runner в самом атоме. Вкладка "Edit" >> "Preferences">>"+Install" и там найти "Atom-runner" и установить. Потом через сочетание "Alt+R" можно выполнить скрипт.

  • @kde416
    @kde416 6 лет назад +1

    забыли про - ord("символ")

    • @zaemiel
      @zaemiel  6 лет назад

      не уверен, что это помогло бы при сплите строки

    • @kde416
      @kde416 6 лет назад

      ну там когда код символа посмотреть нужно было

    • @zaemiel
      @zaemiel  6 лет назад

      ord() возвращает совсем не тот код

    • @M.Makart
      @M.Makart 3 года назад

      Я бы смотрел в hex выводе. Например echo '↑' | hd говорит, что стрелка кодируется байтами e2 86 91 0a (0a отбрасываем, т.к. это перевод строки). Т.е. в Питоне это было бы '\xe2\x86\x91'.

  • @hanckhanck8376
    @hanckhanck8376 4 года назад

    как я понял стрелка вниз означает падение курса, т.е. при повышении курса мы не сможем просплитить. сделал вот так - result=t[-8:] есть ли в этом ошибка?

    • @zaemiel
      @zaemiel  4 года назад

      напомните, плиз, какую строку вы не можете просплитить?

    • @hanckhanck8376
      @hanckhanck8376 4 года назад

      ​@@zaemiel переменная t вы ее просплитили по стрелочке. А если это будет не стрелка вверх а стрелка вниз

    • @zaemiel
      @zaemiel  4 года назад

      проблема в том, что я не помню какое значение было у переменной t.
      Все мои видео - это демонстрация принципа. Не нравится стрелочка, как критерий деления? Придумайте другой. Но ваш код выглядит ужасно. Скорее всего есть другой, более очевидный путь.

    • @hanckhanck8376
      @hanckhanck8376 4 года назад

      ​@@zaemiel так я по вашим видео учусь) поэтому код ужасен) Если серьезно все очень доходчиво и смотрю все ваши видео.
      Мы с сайта цетробанка получаем строку "курс доллара +стрелочка +значение" вы предлагаете сплитить по стрелочке , а я пытаюсь сказать, что стрелочка может быть как вверх так и вниз. В следующий раз просто промолчу если вы это расцениваете как оскорбление

    • @zaemiel
      @zaemiel  4 года назад

      я имею в виду, что конструкция:
      result=t[-8:]
      чудовищна.
      Вы так и не ответили на мой вопрос. Какая там была строка... Пришлось лезть и смотреть. Строка вида:
      "руб. ^63,123"
      Элементарно сплитится по пробелу. Затем берется первый элемент списка и из него берутся все символы кроме первого.
      result = s.split(' ')[-1][1:]
      В видео я просто показал, как можно узнать код спецсимвола. Ужасно.

  • @Pumba053
    @Pumba053 6 лет назад

    А у меня после использования сплит ошибка и не могу понять что не так UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)

    • @zaemiel
      @zaemiel  6 лет назад

      p-notes.ru/
      Там есть раздел FAQ внизу и там я объяснил как мог, что с этим можно сделать.
      Кстати, какой ОС вы пользуетесь?

    • @Pumba053
      @Pumba053 6 лет назад

      Спасибо за подсказку, посмотрю и попробую исправить. Изначально виндовс 10 но промучился с этой ошибкой и установил линукс Убунту 16.04 в итоге ошибка осталась и не могу понять как ее решить.

    • @zaemiel
      @zaemiel  6 лет назад

      Что вам команда locale выводит?

    • @Pumba053
      @Pumba053 6 лет назад

      Вот
      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=

    • @zaemiel
      @zaemiel  6 лет назад

      ммм... локаль выглядит нормально.
      Попробуйте добавить в самое начала файла .bashrc
      вот эту строку:
      export LC_ALL="ru_UA.UTF-8"
      .bashrc находятся в вашей домашней папке. Это скрытый файл. Чтобы его подредактировать можно воспользоваться редактором nano:
      sudo nano ~/.bashrc
      не забудьте потом перезапустить .bashrc
      source ~/.bashrc

  • @greenman3396
    @greenman3396 6 лет назад

    Не хило...

  • @ivanfedorov7934
    @ivanfedorov7934 4 года назад

    огонь беспорно