Написание основных файлов службы systemd

103

Я разрабатываю приложение Nodejs, с которым пользователь взаимодействует через HTTP на localhost. Параметров практически нет, и у демона практически нет зависимостей, и он просто должен быть включен ко времени входа в систему.

Я хотел бы следовать идиомам на каждой платформе для сценариев запуска, а это означает Upstart в Ubuntu и systemd в Fedora.

  • Есть ли хорошие уроки для написания системных файлов systemd?
  • Есть ли «лучшие практики», о которых нужно знать?

Я нашел эти ресурсы:

В основном я ищу своего рода API-интерфейс в качестве справочного материала, а также базовый формат для подражания.

beatgammit
источник
Arch Linux Wiki страница о Systemd имеет интересный раздел о написании служебных файлов.
Руди Матела
> man systemd.service>> man systemd.unit
truezion

Ответы:

29

Я бы начал с справочных страниц по Systemd . Они представляют собой комплексный ресурс системы и услуг.

Существует также часто задаваемые вопросы по freedesktop Systemd .

jasonwryan
источник
43
Страницы руководства будут полезны (хотя я бы хотел, чтобы они были чище), но есть ли базовый учебник по системным файлам? Например, какие части необходимы, какие части рекомендуются, а какие являются дополнительными. Страницы руководства, кажется, предполагают, что я уже эксперт в системных файлах systemd, а я - нет.
beatgammit
Не то, чтобы я знал, к сожалению. Вероятно, существует предположение, что если вы пишете initscripts, вы уже знаете, как писать inixcripts. Просмотрите скрипты Arch и выберите тот, который вам нужен: archlinux.org/packages/community/i686/systemd
jasonwryan
1
Спасибо! С вашей помощью и блогом, который я нашел, я смог получить базовый рабочий. Systemd выглядит намного лучше, чем upstart или старый демон systemv init.
beatgammit
49
У кого есть время там, чтобы начать с этого. Я имею в виду, если вы знаете, что делаете, это отличный справочник, но святая корова, справочные страницы сложны.
Джонатан Комар
1
@ macmadness86 ОП искала авторитетный источник (см. последний абзац); для большинства задач достаточно прочитать служебный файл для аналогичного приложения, а затем manобратиться к конкретным частям страницы. Они на самом деле довольно простые.
jasonwryan
180

Следующий пример основан на этой ссылке, которая на самом деле не содержит всех шагов и приведена только для указания источника: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Шаг 1 : Я создал этот файл (местоположение заметки), который по сути запускает процесс bash с расширенным аргументом. Вы можете запустить свою собственную команду, которая может отличаться от bash.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Шаг 2 :

Перезагрузить systemd:

systemctl daemon-reload

Запустите новый сервис:

systemctl enable foo

(Точно так же вы можете disableэто)

(необязательно) Шаг 3 : Он должен запускаться автоматически при следующей перезагрузке в многопользовательском режиме (уровень запуска 3), но если вы хотите запустить его сразу:

systemctl start foo
systemctl status foo # optional, just to verify

Обновление: для полноты я должен добавить, что Ubuntu Bionic, похоже, имеет очень тщательную справочную страницу. RTFM здесь

некромант
источник
57
Спасибо за публикацию краткого руководства, а не только за ссылки на сторонние страницы руководства!
Тобиас Дж
2
systemctl имеет ярлык команды cat для справки.
Энди Беттисворт
Что такое ярлык команды cat? Как способ создания и редактирования файлов управления systemd без ввода всего пути?
JpaytonWPD
Какие разрешения этот файл должен иметь в идеале?
knocte
2
Согласно man-странице systemd.unit, вы должны вставить его /etc/systemd/system. / usr / lib / systemd - это место, где надлежащие дистрибутивы помещают свои файлы.
wbkang
4

Документация Redhat - отличный источник.

каракал
источник
2
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Стивен Раух
1
@ StephhenRauch Я знаю, что простые ссылки не очень приветствуются, но это огромная тема, и в ответе нелегко подвести итог.
Каракал
Это было самое читаемое руководство, которое я нашел. Это хороший ответ. :-)
хорошо относитесь к своим модам
DigitalOcean также имеет довольно полный набор учебников и соответствующей документации: digitalocean.com/community/tutorials/...
irbanana