Как запустить программу Linux при запуске с помощью systemd

Гайд в разделе Linux Как запустить программу Linux при запуске с помощью systemd содержит информацию, советы и подсказки, которые помогут изучить самые важные моменты и тонкости вопроса….

A stylized terminal window on a laptop. Fatmawati Achmad Zaenuri / Shutterstock

Нужно запускать программу Linux при загрузке? Программное обеспечение systemd предоставляет способ сделать это в любом дистрибутиве Linux с systemd — а сегодня их большинство, включая Ubuntu. Мы проведем вас через процесс создания интегрированной службы и даже поговорим с журналом.

В этом руководстве показано, как настроить системную службу, которая запускается при запуске вашей системы. Чтобы запустить графическую программу при входе в систему, используйте вместо этого диспетчер запуска рабочего стола.

Запуск программ при запуске

Иногда программное обеспечение, которое вы устанавливаете на свой компьютер, подключается к процессу запуска Linux, так что программа запускается автоматически каждый раз при запуске компьютера. Вы можете легко добиться того же поведения с вашими собственными программами и сценариями или фактически с любой другой программой, установленной на вашем компьютере.

Программы, запускаемые при запуске, контролируются systemd, менеджером системы и служб. systemd — это первый процесс, запускаемый при запуске. У него всегда есть идентификатор процесса (PID) 1. Все остальные процессы, запущенные на вашем компьютере, запускаются systemd или процессом, который systemd уже запустил.

Программы, работающие в фоновом режиме, называются демонами или службами. Буква «d» в конце systemd означает демон. В этой статье мы создадим пример службы. Чтобы установить все флажки, наша служба должна быть:

  • Интегрирована с systemd через файл служебной единицы
  • Запускаться при запуске
  • Управляемой с помощью systemctl, интерфейс управления для systemd
  • Возможность записи в журнал

Создание служебной программы

Нам нужна программа, которую запустит systemd. Мы создадим простой скрипт под названием «htg.sh». В этом руководстве используется текстовый редактор Gedit, но вы можете использовать любой текстовый редактор, который вам нравится.

touch htg.sh gedit htg.sh

Откроется редактор gedit. Скопируйте и вставьте в редактор следующий текст:

#! / Bin / bash echo «htg.service: ## Starting ##» | systemd-cat -p info while: do TIMESTAMP = $ (date ‘+% Y-% m-% d% H:% M:% S’) echo «htg.service: timestamp $ {TIMESTAMP}» | systemd-cat -p info sleep 60 done

Сохраните изменения и закройте редактор.

htg.sh script in the gedit editor

Скрипт не делает много, но есть стоит отметить несколько моментов.

  • Две эхо-строки передаются через systemd-cat, программу, которая принимает выходные данные из программы и отправляет их в журнал. Записи в журнале имеют приоритет. Мы используем параметр -p (приоритет), чтобы указать, что наши сообщения предназначены только для информации (информации). Это не важные ошибки или предупреждения.
  • Существует бесконечный цикл while.
  • В переменной TIMESTAMP устанавливаются текущие дата и время. Это форматируется в сообщение и отправляется в журнал.
  • Затем сценарий «спит» на 60 секунд.
  • Через 60 секунд цикл повторяется. Итак, этот сценарий записывает сообщение с отметкой времени в журнал один раз в минуту.

Мы скопируем сценарий в каталог / usr / local / bin.

sudo cp htg.sh / usr / local / bin

И нам нужно сделать его исполняемым:

sudo chmod + x / usr / local / bin / htg.sh

Создание файла служебной единицы

Каждая программа, запускаемая systemd, имеет файл определения, называемый файлом служебной единицы. Он содержит определенные атрибуты, которые systemd может использовать для поиска и запуска программы, а также для определения некоторых из ее поведения.

Нам нужно создать файл модуля для нашей новой службы, но разумно убедиться, что ни один из существующие файлы модулей имеют имя, которое мы хотим дать нашей новой службе.

sudo systemctl list-unit-files —type-service

Вы можете просмотреть список файлов модулей, отсортированный по алфавиту, и проверить, что имя вы не хотите использовать.

Наша служба будет называться «htg.service». Ни у одного файла модуля нет такого имени, поэтому мы можем продолжить и создать наш файл модуля.

sudo gedit /etc/systemd/system/htg.service

Редактор gedit откроется. Скопируйте и вставьте следующий текст в редактор:

[Unit] Description = How-To Geek Service Example Wants = network.target After = syslog.target network-online.target [Service] Type = simple ExecStart = / usr / local / bin / htg.sh Restart = on-failure RestartSec = 10 KillMode = process [Install] WantedBy = multi-user.target

Сохраните изменения и закройте редактор.

htg.service unit file in the gedit editor

Записи имеют следующие значения. Это типичные записи. Нашему простому сервису на самом деле не требуется большинство из них, но включение их позволяет нам их объяснить.

  • Описание: это текстовое описание вашего сервиса.
  • Требуется: Наша служба хочет, но не требует, чтобы сеть была активна до запуска нашей службы.
  • После: список имен модулей, которые должны быть запущены после успешного запуска этой службы, если они ‘ re еще не запущен.
  • Тип: простой.systemd будет считать, что эта служба запущена, как только процесс, указанный ExecStart, будет разветвлен.
  • ExecStart: путь к процессу, который должен быть запущен.
  • Restart: когда и если сервис следует перезапустить. Мы установили для него значение «при сбое».
  • RestartSec: сколько времени ждать перед попыткой перезапуска службы. Это значение указывается в секундах.
  • KillMode: определяет, как systemd должен завершить процесс, если мы попросим systemctl остановить службу. Мы настроили этот параметр на «процесс». Это заставляет systemd использовать сигнал SIGTERM только в основном процессе. Если бы наш сервис был нетривиальной программой, а не простым скриптом, мы бы установили для него значение «смешанный», чтобы гарантировать, что все порожденные процессы также будут завершены.
  • WantedBy: у нас есть этот параметр «multi- user.target », что означает, что служба должна запускаться, пока система находится в состоянии, когда несколько пользователей могут войти в систему, независимо от того, доступен ли графический интерфейс пользователя.

Файл модуля не обязательно должен быть исполняемым, но права доступа к файлу модуля должны ограничивать круг лиц, которые могут его редактировать. Вы не хотите, чтобы злонамеренный или озорной пользователь изменил файл модуля так, чтобы он выполнял совсем другую программу.

Эта команда предоставит владельцу разрешения на чтение и запись, а также права на чтение для группы. У других не будет разрешений.

sudo chmod 640 / etc / systemd / system / htg.service

Мы можем попросить systemctl проверить синтаксис нашего файла модуля, даже если служба еще не запущена. О любых ошибках будет сообщено. (На самом деле, часть «.service» является необязательной для большинства команд.)

systemctl status htg.service

Никаких ошибок не выделяется, что означает, что наш файл модуля синтаксически правильно.

Запуск службы

Когда вы добавляете новый файл модуля или редактируете существующий, вы должны указать systemd перезагрузить определения файлов модуля.

sudo systemctl daemon-reload

Если вы хотите, чтобы служба быть запущенным при запуске, вы должны включить его:

sudo systemctl enable htg

Включение службы не запускает ее, а только устанавливает ее запуск во время загрузки. Чтобы запустить службу сейчас, вы должны использовать systemctl с параметром запуска.

sudo systemctl start htg

Проверка службы

После запуска службы вручную или после перезагрузки компьютера мы можем убедиться, что наша служба работает правильно.

sudo systemctl status htg.service

Статус службы отображается для нас.

Status of htg.service in a terminal widnow
  • Зеленая точка означает, что наша служба работает нормально.
  • Название службы — «htg.service », а подробное описание — это то, что мы предоставили в файле модуля.
  • Нам показано, какой файл модуля был загружен« /etc/systemd/system/htg.service».
  • Служба активна, и время ее запуска указано для нас.
  • Ее PID — 7762.
  • С этой службой связаны две задачи.
  • Служба использует в общей сложности 928 Кибибайт памяти.
  • В контрольную группу входит «htg.sh »и команду сна, запущенную« htg.sh. » Большую часть времени за эту службу выполняет команду sleep.

Нам также показываются последние 10 записей журнала, созданных этой службой. Неудивительно, что все они разделены на одну минуту.

Остановка и отключение службы

Если вам нужно остановить службу, вы можете сделать это с помощью этой команды:

sudo systemctl stop htg.service

Это останавливает службу, но не препятствует ее перезапуску при следующей перезагрузке компьютера. Чтобы остановить запуск службы при запуске, необходимо отключить ее:

sudo systemctl disable htg.service

Если служба запущена, эта команда не работает. прекрати это. Он просто сообщает systemd не запускать службу при следующей перезагрузке.

Если вы хотите остановить службу и предотвратить ее запуск при запуске, используйте обе команды.

Совет службы

Прежде чем пытаться запустить ее как службу, убедитесь, что ваша программа работает должным образом.

Как запустить программу Linux при запуске с помощью systemd
Теги:
Linux Гайды

Для получения большей информации о секретах и подсказках по разделу Linux легко перейдите в гайды Linux по указанной выше ссылке.

0 05.02.2021 Антон
<>

Напишите несколько строк :