Как записать systemd .service файл, работающий systemd-tmpfiles

Разъяснить это для будущего.

ifup и ifdown команды от некоторых ароматов Linux. И используются для управления параметрами сети, начинаются /etc/network/interfaces поскольку debian основывал системы и /etc/sysconfig/network-scripts/ifcg* в основанных на Redhat системах (я не могу прокомментировать других).

Создание и удаление интерфейсов вручную сделаны при помощи ifconfig (или ip который является битом, более хитрым для использования). С мостами можно управлять brctl

Таким образом, после удаления всех интерфейсов от моста с brctl delif <bridg> <if> это может быть перемещено в "неработоспособное состояние" с ifconfig br100 down (или ip link set br100 down) и может теперь быть удален с brctl delbr br100

Обратите внимание на то, что использование network-manager управлять Вашими сетями могло бы сделать Ваши вручную измененные интерфейсы для сброса.

16
13.04.2017, 15:36
2 ответа

[Это непосредственно не решает проблему systemd-tmpfiles, но я думаю, что Вы уже распознали, что в данном случае Вы более обеспечены просто эхо использования.]

Сначала "multi-user.target" может или не может быть тем, что Вы хотите использовать. Если Вы знакомы с понятием runlevels от материала init стиля SysV, многопользовательский systemd эквивалент runlevel 3, который является многопользовательской системой, которая загружается к консоли, не GUI. Эквивалент runlevel 5, который загружается к X, является graphical.target. Значение по умолчанию определяется символьной ссылкой в /etc/systemd/system (и/или /lib/systemd/system; тот в /etc отвергнет тот в /lib) названный default.target, используйте ls для нахождения, где он указывает:

»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target

Для нормальных рабочих столов Linux это будет graphical.target. Это на самом деле не важно, если Вы хотите сервис начальной загрузки, Вы создаете для запуска независимо от того, что значение по умолчанию runlevel/target - в этом случае, мы можем просто использовать default.target и не взволновать то, для чего это является псевдоним. Если Вы будете использовать многопользовательский, однако, и Ваше значение по умолчанию является графическим, то Вашего сервиса не произойдет.

В зависимости от сервиса могут быть более соответствующие и определенные цели или сервисы, относительно которых Вы хотите запустить этого. На основе Вашего другого вопроса default.target прекрасен, вероятно. Как примечание, различие между "целью" и "сервисом" то, что сервис содержит a [Service] раздел, который на самом деле выполняет процесс; цель является просто способом собрать в группу сервисы через различное, "зависит" и "требует" директив; это не делает ничего собственного вне инициирования других целей или сервисов.

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

[Unit]
After=default.target

[Install]
WantedBy=default.target

Раздел "Install" используется, когда сервис установлен; "WantedBy" указывает цель, с которой мы хотим, чтобы этот сервис был включен (значение, что это будет работать, если та цель сделает, но nb., который это не определяет, когда это будет работать относительно других). Так как мы на самом деле хотим, чтобы этот сервис работал позже, а не раньше, мы затем указываем "После" пункта. Это не должно на самом деле совпадать с целью WantedBy (это обычно не), и может быть полностью опущен, если Вы не заботитесь, когда это происходит; я просто использую его на догадке, что большая часть другого материала будет выполнена относительно материала, который где-нибудь объединяется в цепочку к чему-то, что указало Before=default.target (который мы, возможно, также использовали; цель хочет, оцениваются, прежде чем цель выполняется).

Для примера я просто повторю "привет мир" к консоли. Сам сервис описан в [Service] раздел:

[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld

Для команды нужен полный путь. Причина я не просто использовал /usr/bin/echo "hello world" это, это не будет работать (вывод переходит к/dev/null, я думаю), и в то время как сервис, который делает echo "hello world" > /dev/console будет, экспериментирование продемонстрировать, что использование перенаправления оболочки в директиве ExecStart не будет. Таким образом,/usr/local/bin/helloworld является сценарием оболочки с той одной строкой, echo "hello world" > /dev/console.

Отметьте Type=forking, который необходим для сценария оболочки.

Наш полный, минимальный сервисный файл является просто теми тремя разделами ([Unit], [Service], и [Install]). Для установки поместите файл или символьную ссылку на него или в/etc/systemd/system или в/usr/lib/systemd/system, и:

systemctl --system enable helloworld

Это должно распечатать ln -s .... Это не выполняет сервис, он просто настраивает его для выполнения при начальной загрузке, как обсуждено выше.

Вот именно вкратце. man systemd.unit и man systemd.service имейте больше деталей.

30
27.01.2020, 19:48
  • 1
    Спасибо, очень полезный ответ и проблема решены. Просто примечание, в моем дистрибутиве (Chakra Linux) default.target не находится в /etc/systemd/system, но это находится только в /usr/lib/systemd/system –  eang 19.01.2013, 00:37
  • 2
    Вывод от команд зарегистрирован (куда еще он мог пойти)? –  vonbrand 21.01.2013, 22:33
  • 3
    /usr/lib/systemd/... регистрируют, нейтрализация (значение по умолчанию), Вы, как предполагается, отбрасываете Ваш в/etc/systemd/... –  vonbrand 21.01.2013, 22:34
  • 4
    В эти дни default.target может быть найден в /lib/systemd/system/default.target –  czerasz 09.02.2018, 09:33
  • 5
    @czerasz я замечаю на Fedora 27, если я systemctl set-default ... это оставляет символьную ссылку внутри /etc/systemd/system, но это не изменяет тот в /lib, т.е. они указывают на различные цели, но материал в первом должен переопределить последнего. Если Вы установили его сами, это - то, что может произойти. Так или иначе я отредактировал в обоих местах. –  goldilocks 09.02.2018, 15:30

Для systemd-tmpfiles сервиса: это должно поставляться с Вашим распределением, но можно всегда получать сервисный файл из восходящего репозитория мерзавца

2
27.01.2020, 19:48

Теги

Похожие вопросы