Linux предоставляет множество системных служб (например, управление процессами, вход в систему, syslog, cron и другие), а также сетевых (удалённый доступ, почта, печать, веб-хостинг, хранение данных, передача файлов, DNS, DHCP и многое другое).
По сути, служба — это процесс или группа процессов, которые постоянно работают в фоне и ждут запросов, чаще всего от клиентов.
В Linux есть несколько способов управлять службами: запускать, останавливать, перезапускать, включать автозапуск при загрузке. Практически все современные дистрибутивы используют единый менеджер процессов — systemd.
Что такое systemd?
Systemd — менеджер системы и служб для Linux, пришедший на смену init. Он совместим со старыми скриптами SysV и LSB. Основной инструмент для управления им — команда systemctl.
Зачем смотреть список работающих служб?
Это может необходимо для:
— контроля использования ресурсов;
— диагностики проблем с производительностью;
— проверки, что важные сервисы действительно активны;
— повышения безопасности и стабильности.
Systemd сильно упрощает эту задачу: достаточно нескольких команд, чтобы вывести, проверить и при необходимости перезапустить службы.
Просмотр списка служб через systemctl
Если выполнить systemctl без параметров, появится список всех служб systemd с их статусом.
Примеры:
Все загруженные службы:
systemctl list-units --type=service
Только активные:
systemctl list-units --type=service --state=active
Только работающие:
systemctl list-units --type=service --state=running
Упрощаем работу: создаём alias
Если часто используете длинные команды, можно добавить алиас в ~/.bashrc:
alias running_services='systemctl list-units --type=service --state=running'
Теперь достаточно написать running_services, чтобы быстро вывести список работающих служб.
Как узнать, какой порт использует служба
Порты можно проверить через netstat или ss. Например:
netstat -ltup | grep zabbix_agentd ss -ltup | grep zabbix_agentd
Флаги:
→ -l — слушающие сокеты,
→ -t — TCP,
→ -u — UDP,
→ -n — номера портов,
→ -p — название процесса.
Проверка открытых портов в файрволе
В зависимости от дистрибутива:
firewall-cmd --list-services # для FirewallD firewall-cmd --list-ports sudo ufw status # для UFW
Автоматический мониторинг служб
Например, вы можете настроить логирование каждые 5 минут через cron
*/5 * * * * systemctl list-units --type=service --state=running > /tmp/running_services.log
Так у вас всегда будет свежий лог в /tmp/running_services.log.
Автоматический перезапуск при сбое
Чтобы служба перезапускалась сама, нужно изменить её unit-файл:
systemctl edit apache2
Далее нужно добавить:
[Service] Restart=always RestartSec=5s
Затем еще раз проверьте изменения и перезапустите:
systemctl daemon-reload systemctl restart apache2
Повышение безопасности служб
Например, в конфигурацию можно добавить:
[Service] NoNewPrivileges=true ProtectSystem=full PrivateTmp=true
Эти опции ограничивают права процессов и доступ к системе.