summaryrefslogtreecommitdiff
path: root/LINUX/HOME_SERVER/Приложение в SYSTEMD.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/HOME_SERVER/Приложение в SYSTEMD.md')
-rw-r--r--LINUX/HOME_SERVER/Приложение в SYSTEMD.md141
1 files changed, 141 insertions, 0 deletions
diff --git a/LINUX/HOME_SERVER/Приложение в SYSTEMD.md b/LINUX/HOME_SERVER/Приложение в SYSTEMD.md
new file mode 100644
index 0000000..d0c989c
--- /dev/null
+++ b/LINUX/HOME_SERVER/Приложение в SYSTEMD.md
@@ -0,0 +1,141 @@
+```sh
+sudo systemctl edit --force --full mqtt_log.service
+# vim /etc/systemd/system/mqtt_log.service
+
+#==================================
+[Unit]
+Description=mqtt_log
+After=network.target
+
+[Service]
+WorkingDirectory=/home/vlapa/mqtt_log
+StandardError=append:/var/log/myapp/mqtt_log_error.log
+User=vlapa
+Group=vlapa
+Type=simple
+Restart=always
+RestartSec=5
+ExecStart=/home/vlapa/mqtt/.venv/bin/python3 mqtt_log.py
+Environment="PATH=/home/vlapa/mqtt/.venv/bin:/usr/bin:/bin"
+
+
+[Install]
+WantedBy=multi-user.target
+
+#==================================
+# Создаем папку и файл
+mkdir /var/log/myapp
+touch /var/log/myapp/mqtt_log_error.log
+
+#==================================
+sudo systemctl daemon-reload
+sudo systemctl enable myapp
+sudo systemctl start myapp
+sudo systemctl status myapp
+
+# Логи сервиса с последнего запуска
+journalctl -u mqtt_log.service -b
+
+```
+============
+sudo nano /etc/systemd/system/myapp.service
+```
+# Пример конфигурации unit-файла
+
+[Unit]
+Description=My Python Application
+After=network.target
+
+[Service]
+Type=simple
+# Если используете виртуальное окружение:
+ExecStart=/path/to/venv/bin/python /path/to/your/app.py
+# Или без виртуального окружения:
+# ExecStart=/usr/bin/python3 /path/to/your/app.py
+
+# Рабочая директория
+WorkingDirectory=/path/to/your/app/directory
+
+# Пользователь для запуска (опционально)
+User=username
+Group=groupname
+
+# Перезапуск при ошибке
+Restart=always
+RestartSec=5
+
+# Переменные окружения
+Environment="PYTHONPATH=/path/to/your/app"
+Environment="DATABASE_URL=mysql://user:pass@localhost/db"
+
+[Install]
+WantedBy=multi-user.target
+
+
+# Для приложений с зависимостями (виртуальное окружение)
+
+[Service]
+Type=simple
+ExecStart=/home/user/myapp/venv/bin/python /home/user/myapp/main.py
+WorkingDirectory=/home/user/myapp
+Environment="PATH=/home/user/myapp/venv/bin"
+
+
+# Основные команды для управления
+
+
+# Загрузить изменения конфигурации
+sudo systemctl daemon-reload
+
+# Запустить сервис
+sudo systemctl start myapp
+
+# Остановить сервис
+sudo systemctl stop myapp
+
+# Включить автозапуск при загрузке
+sudo systemctl enable myapp
+
+# Проверить статус
+sudo systemctl status myapp
+
+# Просмотреть логи
+sudo journalctl -u myapp -f
+
+
+# Полезные опции для Python-приложений
+
+- **`Restart`** - политика перезапуска:
+
+ - `no` - не перезапускать
+
+ - `on-success` - только при успешном завершении
+
+ - `on-failure` - при ошибке (рекомендуется)
+
+ - `always` - всегда перезапускать
+
+- **`StandardOutput`/`StandardError`** - куда перенаправлять вывод:
+
+ ini
+
+ StandardOutput=journal
+ StandardError=journal
+ # Или в файл:
+ StandardOutput=file:/var/log/myapp.log
+
+
+# Проверка и отладка
+
+bash
+
+# Проверить синтаксис конфигурации
+sudo systemd-analyze verify /etc/systemd/system/myapp.service
+
+# Тестовый запуск без systemd
+sudo -u username /path/to/python /path/to/app.py
+
+# Подробные логи
+sudo journalctl -u myapp -n 100 -f
+
+``` \ No newline at end of file