```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 ```