diff options
Diffstat (limited to 'LINUX/HOME_SERVER/Приложение в SYSTEMD.md')
| -rw-r--r-- | LINUX/HOME_SERVER/Приложение в SYSTEMD.md | 141 |
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 |
