blob: d0c989c92b1c14dffdfabe9bca7dcc01cd5988af (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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
```
|