Linux: "Служба" своими руками. Пишем systemd unit-файл
Хватит запускать важные скрипты "руками" через nohup ./script.sh &. Путь инженера — превратить любой скрипт или приложение в управляемую службу. В современном Linux это делается через systemd unit-файлы.
Задача: Превратим простой Python веб-сервер в службу my-app.service.
1. Ваш скрипт (для примера /opt/my-app/app.py):
Python
2. Создаем unit-файл: sudo nano /etc/systemd/system/my-app.service
Ini, TOML
3. Запускаем и "включаем" службу:
Bash
Взгляд архитектора: Вы не просто "запустили скрипт". Вы декларативно описали его жизненный цикл. Теперь ОС сама следит за ним, перезапускает при сбоях (Restart=on-failure), запускает в нужном порядке (After=network.target) и от имени нужного пользователя. Это первый шаг к построению отказоустойчивых (self-healing) систем.
#linux #systemd #python #automation #devops #гайд #скрипты
Хватит запускать важные скрипты "руками" через nohup ./script.sh &. Путь инженера — превратить любой скрипт или приложение в управляемую службу. В современном Linux это делается через systemd unit-файлы.
Задача: Превратим простой Python веб-сервер в службу my-app.service.
1. Ваш скрипт (для примера /opt/my-app/app.py):
Python
#!/usr/bin/env python3
# Простой веб-сервер
from http.server import HTTPServer, BaseHTTPRequestHandler
class SimpleHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello from Admin Future!')
httpd = HTTPServer(('0.0.0.0', 8000), SimpleHandler)
httpd.serve_forever()
2. Создаем unit-файл: sudo nano /etc/systemd/system/my-app.service
Ini, TOML
[Unit]
Description=My Simple Python Web App
After=network.target
[Service]
Type=simple
# Запускаем от имени 'www-data' для безопасности
User=www-data
Group=www-data
# Указываем путь к нашему скрипту
ExecStart=/usr/bin/python3 /opt/my-app/app.py
# Автоматический перезапуск в случае сбоя
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
3. Запускаем и "включаем" службу:
Bash
# Перечитать конфиги, чтобы systemd увидел новый файл
sudo systemctl daemon-reload
# Запускаем службу
sudo systemctl start my-app
# Проверяем статус
sudo systemctl status my-app
# Включаем автозапуск при загрузке ОС
sudo systemctl enable my-app
Взгляд архитектора: Вы не просто "запустили скрипт". Вы декларативно описали его жизненный цикл. Теперь ОС сама следит за ним, перезапускает при сбоях (Restart=on-failure), запускает в нужном порядке (After=network.target) и от имени нужного пользователя. Это первый шаг к построению отказоустойчивых (self-healing) систем.
#linux #systemd #python #automation #devops #гайд #скрипты
👍4
Linux: `systemd-nspawn` — контейнеры без Docker
Боль: Вам нужно быстро протестировать скрипт или сервис на "чистой" Ubuntu 24.04, но у вас RHEL. Вы не хотите ставить Docker, настраивать
Решение:
Как это работает (на пальцах):
1. Создаем образ ОС (например, Ubuntu):
Bash
2. Запускаем контейнер:
Bash
Готово. Вы в полноценной Ubuntu, которая запущена как сервис
Взгляд архитектора: Это идеальная "песочница" для отладки. Вы получаете полную, загружаемую ОС-контейнер без оверхеда Docker-демона.
#linux #systemd #container #devops #sre #гайд
Боль: Вам нужно быстро протестировать скрипт или сервис на "чистой" Ubuntu 24.04, но у вас RHEL. Вы не хотите ставить Docker, настраивать
daemon.json или разворачивать тяжелую VM.Решение:
systemd-nspawn Это "секретное оружие" systemd . По сути, это chroot на стероидах, который встроен в вашу ОС. Он запускает легковесные контейнеры, используя то же ядро, но с полной изоляцией процессов и файловой системы.Как это работает (на пальцах):
1. Создаем образ ОС (например, Ubuntu):
Bash
# (Нужен `debootstrap`)
sudo debootstrap jammy /srv/ubuntu-jammy
2. Запускаем контейнер:
Bash
# -D = директория
# -b = загрузиться в контейнер (boot)
sudo systemd-nspawn -D /srv/ubuntu-jammy -b
Готово. Вы в полноценной Ubuntu, которая запущена как сервис
systemd .Взгляд архитектора: Это идеальная "песочница" для отладки. Вы получаете полную, загружаемую ОС-контейнер без оверхеда Docker-демона.
systemd-nspawn — лучший инструмент для тестирования systemd -юнитов и проверки скриптов в чистой среде перед "раскаткой" в прод.#linux #systemd #container #devops #sre #гайд
👍2