Запуск python скрипта через systemd

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Tutorial to run Python script via systemd

License

Nivratti/python-systemd

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Tutorial to run Python script via systemd

Systemd Service file location and management

  • Write Service file
  • place your service files inside /etc/systemd/system/ folder
  • reload services using systemctl daemon-reload
  • after that you are able to perform operations such as
    • systemctl start name.service
    • systemctl status name.service
    • systemctl stop name.service
    • systemctl restart name.service
    [Unit] # service description Description=**Enter Service Description** After=syslog.target [Service] Type=simple # user and group -- to run service User=**Enter username** Group=**Enter groupname** # project working directory WorkingDirectory=/path/to/working/dir/ # Command to execute when the service is started ExecStart=/usr/bin/python /path/to/python/demo_script.py # Automatically restart the service if it crashes Restart=on-failure # set Python's buffering of STDOUT and STDERR value to systemd, so that output from the # service shows up immediately in systemd's logs StandardOutput=syslog StandardError=syslog [Install] # Tell systemd to automatically start this service when the system boots # (assuming the service is enabled) WantedBy=multi-user.target 
    [Unit] # service description Description=Python Demo After=syslog.target [Service] Type=simple # user and group -- to run service User=nivratti Group=nivratti # project working directory WorkingDirectory=/programming/python/projects/ # Command to execute when the service is started ExecStart=/usr/bin/python /programming/python/projects/python-demo.py # Automatically restart the service if it crashes Restart=on-failure # set Python's buffering of STDOUT and STDERR value to systemd, so that output from the # service shows up immediately in systemd's logs StandardOutput=syslog StandardError=syslog [Install] # Tell systemd to automatically start this service when the system boots # (assuming the service is enabled) WantedBy=multi-user.target 

    Imp — Specify python interpreter

    Specify Python interpreter

    ExecStart=/usr/bin/python /file/path/python_demo_script.py 

    Service file configuration details

    Источник

    Запуск Python скрипта в виде службы через systemctl/systemd

    Есть несколько способов запуска вашей программы в качестве фоновой службы в Linux, таких как crontab, .bashrc и т. д., но сегодня будет разговор о systemd. Изначально я искал способ запустить свой скрипт на Python в качестве фоновой службы, поэтому даже если сервер по какой-то причине перезагрузится, мой скрипт все равно должен работать в фоновом режиме, после небольшого ресерча и я обнаружил, что systemd позволяет мне это сделать. Давайте начнем.

    Настройки далее будут производиться на машине с Ubuntu 20.04.

    Почти все версии Linux поставляются с systemd из коробки, но если у вас его нет, вы можете просто запустить следующую команду:

    sudo apt install -y systemd 

    Примечание. Флаг -y означает быструю установку пакетов и зависимостей.

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

    Создайте файл python с любым именем. Я назову свой скрипт именем test.py.

    import time from datetime import datetime while True: with open("timestamp.txt", "a") as f: f.write("Текущая временная метка: " + str(datetime.now())) f.close() time.sleep(10) 

    Приведенный выше скрипт будет записывать текущую метку времени в файл каждые 10 секунд. Теперь напишем сервис.

    sudo nano /etc/systemd/system/test.service 

    (имя службы, которая тестируется в этом случае)

    [Unit] Description=My test service After=multi-user.target [Service] User=deepak Group=admin Type=simple Restart=always ExecStart=/usr/bin/python3 /home//test.py [Install] WantedBy=multi-user.target 

    Замените имя пользователя в вашей ОС, где написано . Флаг ExecStart принимает команду, которую вы хотите запустить. Таким образом, в основном первый аргумент — это путь к python (в моем случае это python3), а второй аргумент — это путь к скрипту, который необходимо выполнить. Флаг перезапуска всегда установлен, потому что я хочу перезапустить свою службу, если сервер будет перезапущен.

    Здесь мы определили User=deepak и Group=admin, чтобы убедиться, что скрипт будет выполняться только от имени пользователя deepak, входящего в группу admin.

    Теперь нам нужно перезагрузить демон.

    sudo systemctl daemon-reload 

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

    sudo systemctl enable test.service 

    А теперь давайте запустим наш сервис.

    sudo systemctl start test.service 

    Теперь наш сервис работает.

    Примечание. Файл будет записан в корневой каталог (/), потому что программа запишет путь с точки зрения systemd. Чтобы изменить это, просто отредактируйте путь к файлу. Например:

    import time from datetime import datetime path_to_file = "введите желаемый путь к файлу" while True: with open(path_to_file, "a") as f: f.write("Текущая временная метка: " + str(datetime.now())) f.close() time.sleep(10) 

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

    sudo systemctl stop name_of_your_service 
    sudo systemctl restart name_of_your_service 
    sudo systemctl status name_of_your_service 

    Это было очень поверхностное знакомство с systemd, предназначенное для новичков, которые хотят начать писать свои собственные systemd службы для python.

    ПРИМЕЧАНИЕ. Это относится не только к сценариям Python. Вы можете запустить любую программу с ним, независимо от языка программирования, на котором написана ваша программа.

    Источник

    Как установить в автозапуск python-скрипт используя systemd

    Компьютерное

    Иногда требуется какой-то скрипт или программу запускать как системный сервис. Это можно легко провернуть, если в вашем дистрибутиве используется система инициализации и управления демонами — systemd.

    Для примера, я создам простейший python-скрипт который будет слушать 9988 порт и добавлю его в автозагрузку при старте операционной системы.

    1. Простой python-scrypt

    sudo nano /usr/bin/dummy_service.py
    #!/usr/bin/python3 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("localhost", 9988)) s.listen(1) while True: conn, addr = s.accept() data = conn.recv(1024) conn.close() my_function_that_handles_data(data)

    2. Создание файла сервиса.

    Теперь создадим файл сервиса для с помощью которого расскажем systemd что нам требуется. Файл должен иметь расширение .service и находиться в директории /lib/systemd/system/

    sudo nano /lib/systemd/system/dummy.service

    Добавим информацию о нашем сервисе (можете изменить местоположение скрипта и описание сервиса):

    [Unit] Description=Dummy Service After=multi-user.target Conflicts=getty@tty1.service [Service] Type=simple ExecStart=/usr/bin/python3 /usr/bin/dummy_service.py StandardInput=tty-force [Install] WantedBy=multi-user.target

    Мне кажется из содержимого всё и так понятно — какая строка и за что отвечает.

    3. Включение нового добавленного сервиса.

    Вы добавили, наконец-то, ваш сервис в систему. теперь необходимо перезапустить демон systemctl чтобы он прочел новый файл. Каждый раз как вы вносите изменения в .service файлы вам нужно перезапустить демон.

    sudo systemctl daemon-reload

    Теперь включим запуск сервиса при загрузке системы, и запустим сам сервис.

    sudo systemctl enable dummy.service sudo systemctl start dummy.service

    4. Запуск/Остановка/Статус сервиса

    В конце проверим статус нашего нового сервиса:

    sudo systemctl status dummy.service

    Изображение 1

    Проверим что наш python-скрипт слушает нужный нам порт:

    Иллюстрация 2

    Команды для запуска, остановки и перезапуска сервиса:

    sudo systemctl stop dummy.service #Для остановки сервиса sudo systemctl start dummy.service #Для запуска сервиса sudo systemctl restart dummy.service #Для перезапуска сервиса

    Источник

    Читайте также:  Python list with attributes
Оцените статью