Создание сервис процесса в Ubuntu(запуск в фоновом режиме)

Материал из wiki

В качестве примера выступает сервис для open-webui. 1. Подключаемся к нужному серверу по ssh и вписываем: sudo nano /etc/systemd/system/название сервиса. В нашем случае open-webui.service(/etc/systemd/system/open-webui.service) 2. Вписываем следующие: [Unit] Description=Open WebUI Service After=network.target

[Service] ExecStart=/bin/bash -c "source /home/srv/miniconda3/bin/activate open-webui-env && open-webui serve" Restart=always User=srv Environment="PATH=/home/srv/miniconda3/envs/open-webui/bin/open-webui serve:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" Environment="WEBUI_SECRET_KEY_FILE=/home/srv/.webui_secret_key" WorkingDirectory=/home/srv

[Install] WantedBy=multi-user.target

Расшифровка: Description: Описание сервиса для администратора. After=network.target: Говорит systemd запускать этот сервис после того, как будет готова сеть.

ExecStart: /bin/bash -c "...": Запускает команду в bash. source /home/srv/miniconda3/bin/activate open-webui-env: Активирует виртуальное окружение Conda с именем open-webui-env. && open-webui serve: После активации окружения запускает команду open-webui serve.

Restart=always: Сервис будет автоматически перезапущен User=srv: Указывает, от имени какого пользователя будет работать сервис Environment: Путь где искать исполняемый файл

Environment="WEBUI_SECRET_KEY_FILE=/home/srv/.webui_secret_key" - переменная с указанием закрытого ключа

WorkingDirectory=/home/srv - рабочая директория из которой происходит запуск приложения

WantedBy=multi-user.target — означает, что сервис будет запускаться на многопользовательском уровне.

Далее сохраняем: 1. sudo systemctl daemon-reload 2. systemctl enable open-webui 3. systemctl start open-webui