Ответ
Больше всего из курса по Linux запомнился systemd, особенно после долгой работы с SysV init. Понимание systemd кардинально изменило мой подход к управлению сервисами, отладке и анализу загрузки системы в DevOps-среде.
Почему systemd стал ключевым:
- Управление зависимостями: Возможность четко описывать, что сервис требует наличия сети (
After=network-online.target) или другого сокета (Requires=mysocket.socket). Это делает запуск систем предсказуемым. - Журналирование и отладка: Интеграция с
journaldчерезjournalctl— мощнейший инструмент.# Просмотр логов конкретного сервиса с живым выводом journalctl -u nginx.service -f # Показать логи с момента последней перезагрузки journalctl -b # Фильтр по уровню ошибок и временному интервалу journalctl -p err --since "2023-10-01" --until "2023-10-02" - Контроль ресурсов (cgroups): Возможность ограничивать сервисы прямо в unit-файле — фундамент для контейнеризации.
[Service] MemoryLimit=500M CPUQuota=150% - Таймеры вместо cron: Systemd timers более надежны, интегрированы в логирование и имеют лучшую обработку зависимостей.
Практический пример из опыта: При развертывании самописного агента мониторинга вместо того, чтобы писать сложные init-скрипты, я создал простой unit-файл /etc/systemd/system/my-agent.service:
[Unit]
Description=Custom Monitoring Agent
After=network.target docker.service
Requires=docker.service
[Service]
Type=simple
ExecStart=/usr/local/bin/agent-start.sh
Restart=on-failure
RestartSec=10
User=monagent
Group=monagent
# Важно для безопасности
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
После этого управление сводится к стандартным командам: systemctl start|stop|status|enable my-agent. Это унифицирует подход ко всем сервисам — будь то на bare-metal, VM или в базовом образе контейнера.
Понимание systemd — это must-have для любого инженера, работающего с Linux-серверами, так как это основа управления современными дистрибутивами (RHEL/CentOS 7+, Ubuntu 16.04+, Debian 8+).