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

<p>я разрабатываю приложение nodejs, с которым пользователь взаимодействует через http на localhost. параметров практически нет, и у демона практически нет зависимостей, и он просто должен быть включен ко времени входа в систему.</p><p>я хотел бы следовать идиомам на каждой платформе для сценариев запуска, а это означает upstart в ubuntu и systemd в fedora.</p><ul> <li><strong> есть ли хорошие руководства для написания системных файлов systemd? </strong></li> <li><strong> есть ли какие-либо "лучшие практики", о которых следует знать? </strong></li> </ul><p>я нашел эти ресурсы:</p><ul> <li> <a href="http://fedoraproject.org/wiki/features/systemd">вики-страница fedora о systemd</a> </li> <li> <a href="http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html">блог о написании системных файлов systemd</a> </li> <li> <a href="http://en.wikipedia.org/wiki/systemd">systemd в википедии</a> </li> </ul><p>в основном я ищу своего рода api-интерфейс в качестве справочного материала, а также базовый формат для подражания.</p>

<p>я бы начал с <a href="http://0pointer.de/public/systemd-man/">страницы справочника systemd</a> . они представляют собой комплексный ресурс системы и услуг.</p><p>также есть <a href="http://www.freedesktop.org/wiki/software/systemd/frequentlyaskedquestions">часто задаваемые вопросы по freedesktop systemd</a> .</p>

<p>следующий пример основан на этой ссылке, которая на самом деле не содержит всех шагов и приведена только для указания источника: <a href="http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html">http://patrakov.blogspot.com/2011/01/writing-systemd-service-files .html</a> </p><p><strong> шаг 1 </strong>: я создал этот файл (местоположение заметки), который по сути запускает процесс bash с расширенным аргументом. вы можете запустить свою собственную команду, которая может отличаться от bash.</p><pre><code>[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 </code></pre><p><strong> шаг 2 </strong>:</p><p>перезагрузить <code>systemd</code>:</p><pre><code>systemctl daemon-reload </code></pre><p>запустите новый сервис:</p><pre><code>systemctl enable foo </code></pre><p>(аналогично вы можете <code>disable</code> it)</p><p><strong> (необязательно) шаг 3 </strong>: он должен запускаться автоматически при следующей перезагрузке в многопользовательском режиме (уровень запуска 3), но если вы хотите запустить его сразу :</p><pre><code>systemctl start foo systemctl status foo # optional, just to verify </code></pre><p><strong> обновление: </strong> для полноты, я должен добавить, что ubuntu bionic, похоже, имеет очень тщательную справочную страницу. <a href="http://manpages.ubuntu.com/manpages/bionic/man5/systemd.unit.5.html">rtfm здесь</a> </p>

<p>документация redhat - отличный источник.</p><ul> <li> <a href="https://access.redhat.com/documentation/en-us/red\_hat\_enterprise\_linux/7/html/system\_administrators\_guide/sect-managing\_services\_with\_systemd-unit\_files">создание и изменение файлов системного блока системы на rhel7</a> </li> <li> <a href="https://access.redhat.com/documentation/en-us/red\_hat\_enterprise\_linux/7/html/system\_administrators\_guide/chap-managing\_services\_with\_systemd#tabl-managing\_services\_with\_systemd-introduction-units-locations">управление услугами с systemd | введение в systemd</a> </li> </ul>