Службы в Linux: первые шаги с systemd без лишней магии
Научитесь создать простую службу, запустить её вместе с системой, проверить состояние и найти ошибки в журнале. Инструкция рассчитана на Debian 12 и Ubuntu 24.04 LTS с systemd.

Что получится и что понадобится
За 15–20 минут вы создадите простую службу в systemd: она будет запускаться при старте Linux и раз в 30 секунд писать сообщение в системный журнал. Заодно научитесь остановить её, перезапустить и разобраться, почему служба не стартует. Примеры подходят для Debian 12 с systemd 252 и Ubuntu 24.04 LTS с systemd 255; в более новых версиях эти базовые команды тоже используются.
Перед началом: нужен компьютер или сервер с одной из этих систем, доступ к терминалу и учётная запись с правами sudo. Проверьте, что система работает под управлением systemd: выполните ps -p 1 -o comm=. В ответ ожидается systemd. Если видите другое имя, эта инструкция может не подойти: например, контейнер или другая Linux-система может использовать иной менеджер служб.
Термин: юнит — описание объекта, которым управляет systemd. Служба — один из видов юнитов; её настройки обычно хранят в файле с окончанием .service.
Служба — это не просто команда, запущенная в терминале. systemd запускает её в нужный момент, следит за состоянием процесса и собирает его вывод в журнал.
Создаём службу по шагам
Убедитесь, что есть права администратора. Выполните команду:
sudo -vОна может попросить пароль вашей учётной записи. Символы при вводе обычно не отображаются — это нормально. Проверка: команда завершилась без сообщения об ошибке. Если у вас нет sudo-доступа, попросите администратора выполнить команды или выдать нужные права.
Создайте скрипт, который будет запускать служба. Он выводит короткое сообщение, ждёт 30 секунд и повторяет цикл. Введите команду целиком:
sudo tee /usr/local/bin/hello-demo.sh <<'EOF' #!/bin/sh while : do printf '%s\n' 'hello-demo: service is running' sleep 30 done EOF sudo chmod 755 /usr/local/bin/hello-demo.shПроверка: выполните
ls -l /usr/local/bin/hello-demo.sh. В строке файла должны быть права на чтение и выполнение, в том числе для владельца. Скрипт не нужно запускать вручную — его будет запускать systemd.Опишите службу. Создайте юнит-файл:
sudo tee /etc/systemd/system/hello-demo.service <<'EOF' [Unit] Description=Demo service that writes a periodic message [Service] Type=simple ExecStart=/usr/local/bin/hello-demo.sh Restart=on-failure [Install] WantedBy=multi-user.target EOFType=simpleозначает, что systemd считает службу запущенной после старта указанного процесса.Restart=on-failureпросит перезапускать его после сбоя, но не после штатной остановки. Проверка: командаsudo cat /etc/systemd/system/hello-demo.serviceпоказывает все три секции и путь к скрипту.Попросите systemd перечитать настройки и запустите службу.
sudo systemctl daemon-reload sudo systemctl enable --now hello-demo.serviceПервой командой systemd перечитывает список юнитов после создания файла. Вторая запускает службу сейчас и включает её автоматический запуск при загрузке. Проверка:
systemctl is-active hello-demo.service systemctl is-enabled hello-demo.serviceОжидаемые ответы —
activeиenabled. Если команда запуска вывела ошибку, переходите к разделу о неполадках ниже.Посмотрите состояние и журнал.
systemctl status hello-demo.service --no-pager journalctl -u hello-demo.service -n 20 --no-pagerВ статусе ищите состояние
active (running), а в журнале — строкиhello-demo: service is running. Проверка: сообщение должно появиться после старта и повторяться примерно раз в 30 секунд. Для просмотра новых записей в реальном времени добавьте к команде журнала параметр-f; остановите просмотр сочетанием Ctrl+C.Потренируйтесь управлять службой. Команды запуска, остановки и перезапуска выглядят так:
sudo systemctl stop hello-demo.service sudo systemctl start hello-demo.service sudo systemctl restart hello-demo.serviceПроверка после каждой операции — команда
systemctl is-active hello-demo.service: после остановки она ответитinactive, после запуска или перезапуска —active. Чтобы отключить автозапуск и остановить службу, выполнитеsudo systemctl disable --now hello-demo.service.
Если служба не запускается
Сначала смотрите не только сообщение команды, но и подробности юнита: systemctl status hello-demo.service --no-pager. Затем проверьте журнал: journalctl -u hello-demo.service -n 50 --no-pager. В нём обычно видна конкретная причина отказа.
Unit hello-demo.service could not be found. systemd не видит файл юнита. Проверьте его имя и путь: ожидается/etc/systemd/system/hello-demo.service. После исправления файла выполнитеsudo systemctl daemon-reload, затем повторите запуск.status=203/EXEC. systemd не смог выполнить команду изExecStart. Проверьте, что скрипт существует по указанному пути, начинается с#!/bin/shи имеет право на выполнение. Исправить последнее можно командойsudo chmod 755 /usr/local/bin/hello-demo.sh.Permission denied. Часто это означает, что не хватает прав на запуск скрипта или чтение одного из каталогов в его пути. Проверьте права командойls -l /usr/local/bin/hello-demo.sh; не выдавайте всем пользователям больше прав, чем нужно.Служба запускается и сразу останавливается. Посмотрите журнал на предмет ошибки скрипта и проверьте его запуск вручную:
sudo /usr/local/bin/hello-demo.sh. В этом примере команда должна продолжать работать, выводя сообщение раз в 30 секунд; остановить её можно сочетанием Ctrl+C. После ручной проверки снова запускайте службу через systemd.Start request repeated too quickly. Служба несколько раз быстро завершилась, и systemd временно прекратил попытки запуска. Исправьте первичную ошибку по журналу, затем выполнитеsudo systemctl reset-failed hello-demo.serviceи запустите службу заново.
Что учитывать на сервере
Учебная служба безопасна и почти ничего не потребляет, но её устройство не стоит бездумно копировать для приложения в продакшене. Скрипт бесконечно работает и сам по себе не умеет корректно обрабатывать сигналы завершения. Для реального приложения проверьте, как его процесс останавливается, сколько времени ему нужно на завершение и что происходит при повторном запуске.
Ещё два практических ограничения:
Restart=on-failureне исправляет сбой — он лишь перезапускает процесс. Если приложение падает снова и снова, проверьте журнал и причину падения, а не полагайтесь на автоматические рестарты.Не добавляйте службу от root, если программе не нужны административные права. Для рабочего сервиса задайте отдельного системного пользователя и проверьте, к каким файлам и каталогам ему действительно необходим доступ. В этой учебной настройке отдельный пользователь не создаётся.
Что делать дальше
Остановите демонстрационную службу или отключите её, если она больше не нужна. Затем возьмите простую задачу с вашего сервера и изучите документацию именно запускаемого приложения: какой командой оно стартует, как пишет журналы и корректно ли завершает работу. После настройки проверьте запуск после перезагрузки и посмотрите в журнале, сколько времени служба поднимается и не появляются ли повторные ошибки.
Изменение параметров юнита требует команды sudo systemctl daemon-reload; изменение самого скрипта обычно можно проверить перезапуском службы. Настройка сетевых портов, секретов приложения и ограничений systemd — отдельные темы: не добавляйте такие параметры в юнит, пока не знаете, как они влияют на конкретную программу.
Задачи: математика, физика, химия: Разбор задачи по шагам с проверкой и похожей задачей
Спросить за 10 ₽Источники: systemd.service — формат и параметры юнитов, systemctl — управление менеджером systemd
Частые вопросы
Как понять, что Linux использует systemd?
Что делать, если у меня другая версия Linux?
Служба не стартует. С чего начать?
Нужно ли перезагружать компьютер после изменения юнита?
Безопасно ли включать автозапуск любой службы?
Почему <code>systemctl status</code> показывает inactive после перезагрузки?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.