Разъяснить это для будущего.
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
управлять Вашими сетями могло бы сделать Ваши вручную измененные интерфейсы для сброса.
[Это непосредственно не решает проблему 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
имейте больше деталей.
Для systemd-tmpfiles сервиса: это должно поставляться с Вашим распределением, но можно всегда получать сервисный файл из восходящего репозитория мерзавца
default.target
не находится в/etc/systemd/system
, но это находится только в/usr/lib/systemd/system
– eang 19.01.2013, 00:37default.target
может быть найден в/lib/systemd/system/default.target
– czerasz 09.02.2018, 09:33systemctl set-default ...
это оставляет символьную ссылку внутри/etc/systemd/system
, но это не изменяет тот в/lib
, т.е. они указывают на различные цели, но материал в первом должен переопределить последнего. Если Вы установили его сами, это - то, что может произойти. Так или иначе я отредактировал в обоих местах. – goldilocks 09.02.2018, 15:30