Создание systemd-unit

1. Создай скрипт

sudo mkdir -p /opt/devops-http
sudo nano /opt/devops-http/server.py

Вставь:

from http.server import HTTPServer, BaseHTTPRequestHandler

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b"Hello from systemd service\n")

server = HTTPServer(("0.0.0.0", 8080), Handler)
server.serve_forever()

Сделай исполняемым:

sudo chmod +x /opt/devops-http/server.py

Проверь вручную:

python3 /opt/devops-http/server.py

В другом терминале:

curl http://localhost:8080

Останови сервер Ctrl+C. IMPORTANT: Обрати внимание, что скрипт создавался в /opt, так как это стандартная директория для сторонних приложений. При создании скрипта в ней не будет проблем с правами доступа, так как в /opt обычно нет ограничений на запись для root.

2. Создай systemd-юнит

sudo nano /etc/systemd/system/devops-http.service

Вставь:

[Unit]
Description=DevOps Practice HTTP Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/devops-http/server.py

Restart=always
RestartSec=3

MemoryMax=100M
CPUQuota=50%

User=nobody
Group=nogroup

[Install]
WantedBy=multi-user.target

3. Активируй сервис

sudo systemctl daemon-reload
sudo systemctl enable devops-http.service
sudo systemctl start devops-http.service

Проверка:

systemctl status devops-http.service
curl http://localhost:8080

4. Проверка рестарта при падении

Узнай PID:

systemctl show devops-http.service -p MainPID

Убей процесс:

sudo kill -9 <PID>

Проверь, что поднялся снова:

systemctl status devops-http.service
curl http://localhost:8080

5. Смотреть логи

journalctl -u devops-http.service -f