blob: d67c8c0a739c46b64634b0a6f1fd655d987bb509 (
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
![[Python_шпаргалка.png]]
```bash
which python3
which pip
sudo apt install -y python3-pip
pip install numpy
sudo apt install -y python3-virtualenv
which virtualenv
# в папке проекта для ДЕактивации среды:
deactivate
#=========================================
cd code
mkdir pythontests
cd pythontests
python3 -m venv .venv-name
. ./.venv-name/bin/activate
nvim pyrightconfig.json
{
"venv": "env",
"venvPath": "."
}
# в папке проекта для ДЕактивации среды:
deactivate
#==========================================
# Список пакетов с зависимостями:
pip freeze
# Создаем файл с зависимостями:
pip freeze > requirements.txt
# Устанавливаем все зависимости в другом месте:
pip install -r requirements.txt
# список установленных пакетов:
pip list
# удалить пакет:
pip uninstall <packet> -y
```
```sh
# Активация в Windows:
python -m venv venv
.\venv\Scripts\activate
# Создаем файл с зависимостями:
pip freeze > requirements.txt
# создаем файл requirements.txt (со всеми необходимыми зависимостями) и запускаем команду:
pip install -r .\requirements.txt
```
```sh
git clone user@address:~/packet.git
cd packet
# Создаем сам скрипт:
vim install.sh
# Вносим в него:
apt update
apt install -y gcc python3-dev python3-venv
python3 -m venv env
source env-allocation/bin/activate
pip install wheel
pip install -r requirements.txt
export KEY_SECRET=''
# возможно нужно дать разрешение на запуск!
sudo sh ./install.sh
sudo python3 ./runner.py
```
=========================
Вот как поместить Python-программу в systemd для автозапуска:
## 1. Создайте unit-файл для systemd
Создайте файл в `/etc/systemd/system/` (для системных сервисов) или `~/.config/systemd/user/` (для пользовательских сервисов):
bash
sudo nano /etc/systemd/system/myapp.service
## 2. Пример конфигурации unit-файла
ini
[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
## 3. Для приложений с зависимостями (виртуальное окружение)
ini
[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"
## 4. Основные команды для управления
bash
# Загрузить изменения конфигурации
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
## 5. Полезные опции для Python-приложений
- **`Restart`** - политика перезапуска:
- `no` - не перезапускать
- `on-success` - только при успешном завершении
- `on-failure` - при ошибке (рекомендуется)
- `always` - всегда перезапускать
- **`StandardOutput`/`StandardError`** - куда перенаправлять вывод:
ini
StandardOutput=journal
StandardError=journal
# Или в файл:
StandardOutput=file:/var/log/myapp.log
## 6. Пример для Flask/Django приложения
ini
[Unit]
Description=My Flask Web Application
After=network.target mysql.service
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/var/www/myapp/venv/bin/gunicorn --workers 3 --bind unix:/tmp/myapp.sock wsgi:app
Environment="FLASK_ENV=production"
Restart=always
[Install]
WantedBy=multi-user.target
## 7. Проверка и отладка
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
## Советы:
1. Убедитесь, что Python-скрипт имеет права на выполнение
2. Используйте абсолютные пути во всех настройках
3. Для разработки можно запускать как user-сервис без sudo
4. Для приложений с GUI может понадобиться `Environment="DISPLAY=:0"`
=====================
|