Как сделать чтобы скрипт работал постоянно python
Перейти к содержимому

Как сделать чтобы скрипт работал постоянно python

  • автор:

Как запустить Python скрипт на хостинге/виртуальном сервере?

Написал небольшой скрипт, который парсит обьявления на ОЛХ по параметрам. Если появляется новое обьявление скрипт отправляет мне его данные в телеграмм. В пайтоне не силен, работаю на другом ЯП, сделал уведомлялку чтоб снять жилье. Суть вопроса в том, что скрипт работает только локально и это не совсем удобно, ведь ноутбук у меня не включен 24/7. Есть бесплатный хостинг beget, возможно ли на нем или на другом хостинге запустить скрипт чтоб он работал постоянно? Без cron и прочих планировщиков задач, в скрипте стоит while: True . sleep(120). то есть скрипт каждые две минуты проверяет не появилось ли новое обьявление.

  • Вопрос задан более двух лет назад
  • 10382 просмотра

Как сделать чтобы скрипт работал постоянно python

Пишем своего робота на Python. Урок 13

Продолжаем писать робота-анализатора госконтрактов. Сегодня мы разберемся, как научить скрипт запускаться самостоятельно, без вашего участия — вы будете указывать только нужное время.

Съемка и монтаж: Глеб Лиманский

Нам понадобятся bash и crontab, начнем с первого. У bash есть определенный язык, который мы можем использовать в терминале. Сперва нужно создать файл, с которым bash сможет взаимодействовать, то есть, запускать его и исполнять его команды.

Откроем проект и создадим новый файл runscript.sh. Он всегда должен начинаться со строчки #!/bin/bash.

После этого можем прописать команду к исполнению, она будет работать, как и любая из предыдущих наших команд в терминале: напишем python3 и название файла, который нужно запустить. После этого в терминале пишем команду bash и название нашего скрипта.

Так как скрипт лежит в корневой директории, путь мы не прописываем, только название

Так как скрипт лежит в корневой директории, путь мы не прописываем, только название

Когда команда выполнилась, на вашу почту должно прийти письмо с госконтрактами. Еще нужно активировать среду, в которой мы работали, когда писали наш проект. Добавим в скрипт еще одну строчку с командой source и ссылкой — ее можно увидеть, когда вы запускаете виртуальное окружение.

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

Чтобы создать кронтаб, вводим crontab -e и попадаем в программу vi, где можем его написать. В этом нам поможет сайт crontab guru. С помощью звездочек и цифр мы можем указать, как часто хотим запускать выполнение скрипта. Пять звездочек означают, что скрипт будет исполняться каждую минуту.

Если, например, мы укажем в минутах 0, а в часах 21, то код будет выполняться каждый день в 9 вечера.

Для примера попробуем запускать скрипт каждую минуту. Чтобы начать писать что-то в vi, нужно сначала нажать букву i. Теперь пропишем параметры для crontab (в нашем случае * * * * *) и в конце добавим bash runscript.sh. Чтобы закончить редактуру файла vi, нажимаем клавишу Esc и пишем :wq.

Проверим, появился ли он в списке уже известной нам командой crontab -l.

Чтобы следить за рассылками, в терминале используем команду mail. Она покажет, приходили ли вам письма и сколько.

Теперь пора остановить скрипт. Для этого пропишем crontab -r. Перепроверить его можно той же командой crontab -l.

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

Если у вас появились вопросы, вы можете задать их в нашем Telegram-чате.

Как запустить скрипт на Python

Начинающий разработчик на Python, помимо синтаксиса и основных правил использования операторов этого языка, должен уметь запускать код на исполнение. Ведь только так можно понять, работает ли написанный вами скрипт, или в нем содержатся ошибки. Рассмотрим подробнее, как можно запустить скрипты в терминале операционной системы, в интегрированной среде разработки или просто из интерфейса ОС. Это позволит вам выбрать подходящий вариант и повысить эффективность своей работы.

Интерпретатор Python

Рассматриваемый язык программирования является одним из самых прогрессивных на текущий момент. Он позволяет быстро и эффективно решать задачи в самых разных областях. Однако под термином Python понимают также интерпретатор, то есть программу на компьютере, которая позволяет запускать на исполнение написанные скрипты. Она представляет собой дополнительный программный слой между аппаратным обеспечением ПК и кодом.

Существует несколько интерпретаторов:

  • написанные на языке программирования С;
  • написанные на языке программирования Java;
  • написанные на языке Python;
  • программы, реализованные в среде .NET.

Выбор конкретного варианта для конечного пользователя значения не имеет. Независимо от вида программы, написанный код будет выполняться именно так, как предусмотрено правилами этого языка.

Запуск возможен двумя способами: как готовая к использованию программная последовательность (скрипт или модуль) или как отдельные куски кода, которые вводятся прямо в окно программы.

Интерактивный запуск кода

Для тестирования отдельных команд можно использовать интерпретатор в режиме интерактивного сеанса. Для этого необходимо открыть командную строку операционной системы и ввести команду, которая запускает интерпретатор.

Для ОС Linux это будет выглядеть следующим образом:

$ python3 Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 

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

Интерактивное исполнение кода необходимо для того, чтобы немедленно протестировать фрагмент написанного кода. Кроме того, его можно использовать в процессе обучения для проверки действий тех или иных операторов «на лету». Этот способ интерпретации команд позволяет попробовать нужные вам функции языка, не прибегая к написанию отдельных скриптов для этого.

Выйти из интерактивного режима можно с помощью команды quit(), или просто закрыв окно терминала в Windows.

Для открытия терминала или командной строки перед запуском самого интерпретатора необходимо:

  • В Windows нажать комбинацию клавиш «Флажок» + «R», после чего ввести команду cmd и нажать на кнопку «ОК» в диалоговом окне.
  • В Linux или других подобных операционных системах доступ к командной строке предоставляется с помощью дополнительной программы. Можно использовать xterm или Konsole.
  • В macOS для получения доступа к терминалу необходимо выбрать меню «Приложения», после чего перейти в раздел «Утилиты» и кликнуть на элементе «Терминал».

Как работает интерпретатор Python для скриптов

Запуск на исполнение написанных скриптов или модулей производится в пакетном режиме. И выполняется по сложной схеме, которая состоит из следующих этапов:

  1. Последовательная обработка всех операторов, которые записаны в скрипте.
  2. Компиляция исходного хода в промежуточный формат. Интерпретатор создает байт-код, который представляет собой язык программирования низкого уровня, независимый от платформы и операционной системы. Байт-код необходим для оптимизации процесса выполнения скрипта.
  3. Исполнение полученного кода. На этом этапе вступает в действие виртуальная машина Python (PVM), которая циклично перебирает каждый оператор из скрипта и запускает его на исполнение. Как будто вы вводите каждую команду последовательно в интерактивном интерпретаторе.

Запуск скриптов в командной строке

В интерактивном режиме, который обсуждался выше, можно записывать и выполнять любое количество строк кода. Но после закрытия окна терминала они не сохраняются. Поэтому реальные программы на Python пишутся в виде скриптов и представляют собой обычные текстовые файлы. Чтобы избежать путаницы при их хранении, им присваиваются расширения .py или .piw.

Создавать текстовый файл можно с помощью любого редактора, в том числе Notepad. Однако лучше использовать более продвинутые решения, например Sublime Text. Для примера возьмем наиболее простой скрипт, с которого начинается знакомство с любым языком программирования.

#!/usr/bin/env python3 print('Hello World!') 

Файл можно сохранить в вашем рабочем каталоге с любым именем и расширением .py.

Чтобы запустить скрипт на исполнение, нужно использовать интерпретатор языка программирования и в качестве дополнительного параметра указать имя созданного вами файла.

$ python3 hello.py Hello World! 

В приведенном выше примере файл был назван «hello.py». После ввода команды нужно нажать клавишу «Ввод», и на экране появится результат работы скрипта. То есть надпись «Привет, Мир» или классическое английское «Hello World»!

Если файл с программой сохранен не в каталоге с интерпретатором, нужно указывать путь к нему.

Переназначение устройства вывода информации

При исполнении программного кода на Python иногда необходимо сохранять результаты, которые отображает на экране программа. Они в дальнейшем анализируются для поиска ошибок или других целей. В этом случае скрипт необходимо запускать следующей командой:

$ python3 hello.py > output.txt 

По результатам работы скрипта создается файл с именем output.txt, в который сохраняется все то, что должно было появиться на экране во время работы в программе. Это стандартный синтаксис, предусмотренный операционной системой.

Если файла с заданным именем не существует, ОС создает его автоматически. Если существует – данные в нем перезаписываются без сохранения предыдущих. В случае, когда есть необходимость в добавлении данных в конец текстового файла, вместо одного значка > необходимо указать два >>.

Прокачать навык программирования на Python и найти работу Junior Python разработчика помогут наши менторы Выбрать ментора

Запуск из командной строки без интерпретатора

В последних версиях операционной системы Windows добавлена возможность запускать скрипты на Python без ввода в командной строке названия программы-интерпретатора. То есть необходимо просто написать название файла с расширением.

C:\devspace> hello.py Hello World! 

Обусловлено это тем, что при клике на файле или запуске его из командной строки операционная система автоматически ищет связанное приложение и запускает его. Точно так же вы открываете файлы Word, просто кликнув на них курсором мыши.

В Unix таким образом тоже можно запускать скрипты. Однако для этого в первую строку текстового файла с командами необходимо добавить текст #!/Usr/bin/env python. Он указывает на программу, с помощью которой производится запуск. А интерпретатор языка программирования расценивает строку как комментарий и пропускает её.

Запуск скриптов из интерактивного режима

Находясь в интерактивном режиме (описан в первом разделе), пользователь может загрузить файл с написанной ранее последовательностью команд и запустить его на исполнение. Такой способ можно применять, когда модуль содержит вызовы функций, методов или других операторов, генерирующих текст на экране. В противном случае видимых результатов работы программы не будет.

Запустить скрипт из интерактивного режима можно командой:

>>> import hello Hello World! 

Обратите внимание, что эта команда срабатывает один раз за интерактивный сеанс. Поэтому, если внести изменения в файл со скриптом и перезапустить его этой командой, ничего не произойдет.

Заключение

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

© Copyright 2014 — 2023 mkdev | Privacy Policy

Запускаем Python-скрипт на сервере, чтобы он работал всё время

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

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

Коротко — суть

Чтобы было понятно, что тут происходит, вот короткая версия:

  1. Настраиваем удалённый доступ к серверу.
  2. Создаём папку и заливаем в неё скрипт, который в итоге должен будет работать всё время.
  3. Создаём у себя на компьютере файл службы — он управляет настройками автозапуска скрипта.
  4. Отправляем файл службы на сервер.
  5. Обновляем на сервере данные обо всех службах и запускаем нашу.

Теперь подробно про каждый шаг.

Предварительная работа

Основное, что мы будем использовать, — это удалённый доступ к серверу по SSH. Для этого он должен быть включён на самом сервере, и там же можно сразу посмотреть параметры доступа. Например, для работы нашего учебного сервера мы пользуемся услугами SpaceWeb, где доступ по SSH включается из панели управления:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Запускаем SSH и проверяем, что соединение устанавливается. Чтобы соединиться, нужно написать в терминале команду ssh имя_пользователя@адрес_сервера, после чего нажать Enter. Сервер спросит пароль, и, если мы его правильно ввели, нас пустят.

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Мы видим приветствие сервера, значит, всё прошло хорошо и мы можем управлять им со своего компьютера. Для этого нужно будет писать в терминал команды и реагировать на то, что тебе ответит сервер.

Отправляем скрипт на сервер

Чтобы не захламлять корневую папку на сервере, создадим новую папку bot. Вот эта команда:

После этого открываем новую командную строку на компьютере, а не на сервере. Для этого нужно запустить ещё одно окно терминала. Там пишем такое:

scp /Users/mihailpolanin/Downloads/bot.py mpolyanin@77.222.61.9:bot

Вот что это означает:

  • scp — копирование файла по SSH;
  • /Users/mihailpolanin/Downloads/bot.py — это путь к нашему скрипту на компьютере. Его замените на то, что будет у вас;
  • mpolyanin@77.222.61.9 — адрес сервера и логин пользователя. Это тоже замените на ваши данные;
  • : — отделяет сервер от папки;
  • bot — название папки, которую мы только что создали на сервере.

Лайфхак: чтобы не писать вручную пути до файлов на локальном компьютере, можно перед началом ввода пути просто перетащить файл в окно терминала. Терминал поймёт, что вы имели в виду «путь до этого файла», и подставит данные сам.

После запуска у нас попросят пароль от сервера — вводим его и видим статистику отправки файла:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Переключаемся обратно в SSH-соединение и проверяем, что файл скопировался и лежит в папке. Для этого вводим две команды: первая перейдёт в эту папку, а вторая покажет её содержимое:

Запускаем Python-скрипт на сервере, чтобы он работал всё время

Готовим файл для работы службы

Нам нужно, чтобы система сама следила за тем, чтобы скрипт работал всё время и запускался после перезагрузки. В Linux за это отвечают службы — одну из таких служб мы сейчас и сделаем.

Создаём на компьютере новый файл bot.service и вставляем туда такое:

[Unit] Description=tg-bot After=multi-user.target [Service] User=root Group=root Type=simple Restart=always ExecStart=/usr/bin/python3 /bot/bot.py [Install] WantedBy=multi-user.target

Два самых важных параметра — это путь к нашему скрипту (/bot/bot.py) и название службы: tg-bot. Название может быть любым, а вот путь к скрипту нужно указать точно.

Теперь закидываем этот файл на сервер в папку /usr/lib/systemd/system. Для этого в командной строке компьютера пишем:

scp /Users/mihailpolanin/Downloads/bot.service mpolyanin@77.222.61.9:/usr/lib/systemd/system

Как и раньше, не забудьте заменить адрес до файла .service на вашем компьютере, а также имя пользователя и адрес сервера. Первый адрес можно не писать вручную, а перетащить файл в терминал сразу после набора команды scp.

Запуск службы

Теперь нам нужно перезагрузить все службы, чтобы наш файл тоже попал в общий список для запуска. Открываем SSH-консоль и выполняем там такую команду:

sudo systemctl daemon-reload

И сразу включим наш сервис, чтобы он не отключался при перезагрузке сервера:

sudo systemctl enable bot.service

Всё, можно запускать наш телеграм-бот как службу. Вот основные команды для этого:

  • sudo systemctl start bot.service — запустить службу;
  • sudo systemctl stop bot.service — остановить службу;
  • sudo systemctl status bot.service — посмотреть статус, работает или нет.

Что дальше

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

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.

Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!

Получите ИТ-профессию

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *