Назад | Перейти на главную страницу

Debian 9 - rc.local устарел, как запустить python при запуске

Я немного потерялся, у меня есть Debian 9 сервер и Python Flask скрипт, который я пытаюсь запустить при запуске.

В прошлом я использовал rc.local запускать что-то при запуске, но при чтении кажется, что он устарел.

Может ли кто-нибудь сказать мне, что это за замена, какой метод мне лучше всего использовать сейчас?

Debian 9 (как и многие другие текущие дистрибутивы Linux) использует systemd для запуска и управления вашей системой и службами.

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

Специальная документация Debian по systemd находится на https://wiki.debian.org/systemd
Страница https://wiki.debian.org/systemd/Services содержит подробные пошаговые инструкции по написанию собственного (минимального) файла модуля:

  • Создайте файл модуля "myservice.service" в каталоге /etc/systemd/system/

    # /etc/systemd/system/myservice.service 
    [Unit]
    Description=My Service
    After=network.target
    
    [Service]
    Type=simple
    Restart=always
    ExecStart=/usr/local/bin/myservice
    
    [Install]
    WantedBy=multi-user.target
    
  • Перезагрузите systemd, чтобы получить измененные / новые файлы модулей: systemctl daemon-reload

  • Включите и запустите новую службу

    systemctl enable myservice.service
    systemctl start myservice.service
    

Вы запускаете его с помощью модуля systemd, как и любую другую службу.

В Интернете есть множество руководств о том, как это настроить. Или вы можете просто начать со скелета, например:

[Unit]
Description=uWSGI instance to serve my project
After=network.target

[Service]
User=you
Group=www-data
WorkingDirectory=/home/you/project
Environment="PATH=/home/you/project/venv/bin"
ExecStart=/home/you/project/venv/bin/uwsgi --ini uwsgi.ini

[Install]
WantedBy=multi-user.target

Однозначного ответа нет, но можно использовать что-то вроде Руководитель:

Supervisor - это система клиент / сервер, которая позволяет пользователям отслеживать и контролировать ряд процессов в UNIX-подобных операционных системах.