Рейтинг:2

Заменяет ли dist-upgrade служебные файлы?

флаг my

Недавно я заметил сервер, выполняющий apt-get update && apt-get dist-upgrade

Помимо прочего, был обновлен и перезапущен докер.

Однако я заметил, что некоторые изменения, внесенные ранее в файл службы, теперь исчезли. Файл в /lib/systemd/система/докер.сервис вроде сбросили.

Это возможно? Я не помню, бежал ли я демон-перезагрузка после этих изменений.

РЕДАКТИРОВАТЬ: Чтобы быть ясным: мне интересно, dist-обновление в основном удалил служебный файл и заменил его стандартным?

И делает демон-перезагрузка предотвратить это в будущем?

EDIT2: Хорошо, похоже sudo systemctl редактировать docker.service это путь и выполняет демон-перезагрузка при сохранении.

muru avatar
флаг us
Отвечает ли это на ваш вопрос? [Как переопределить или настроить службы systemd?](https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services)
флаг my
@muru Нет, мой вопрос скорее «заменил ли dist-upgrade весь служебный файл новым, игнорируя существующий?»
флаг my
@muru А, я прочитал немного дальше, и там подробно описано, что нельзя редактировать файлы /lib/systemd/. Да, это будет так.
Рейтинг:9
флаг in

Не редактируйте файлы в /lib/systemd/ или /usr/share/systemd, так как они будут перезаписаны при обновлении.

Вместо этого скопируйте файл в /etc/systemd/ и внесите изменения там.

Каталог /etc/ (по крайней мере, для systemd) считается местом для хранения локальных файлов конфигурации. Все остальные каталоги /**/systemd/ считаются источниками файлов конфигурации по умолчанию и примеров, которые следует заменять при любом обновлении.

Еще одна причина не редактировать эти файлы конфигурации, поставляемые пакетом, заключается в том, что если вы скопируете их в /etc/systemd/... и отредактируете и сделаете ошибку, вы всегда сможете сравнить с исходным файлом.

systemctl демон-перезагрузка ничего не мешает. Он просто говорит systemd пересмотреть всю свою конфигурацию и использовать все, что изменилось.

bac0n avatar
флаг cn
думаю, что `/usr/local/lib/systemd/system/` лучше, чем `/etc/systemd...` [1](https://unix.stackexchange.com/questions/224992/where-do-i- положить-мой-системный-устройство-файл)
флаг et
@ bac0n санкционированное systemd расположение — `/etc/systemd`. Это то, что использует `systemctl edit`.
user10489 avatar
флаг in
Я бы тоже не стал редактировать файл в /usr/local/lib/systemd, я бы скопировал его в /etc/systemd перед редактированием.
bac0n avatar
флаг cn
@StephenKitt, то, что вы [предлагаете] (https://steveazz.xyz/micro/systemd-drop-in/), является чем-то совершенно другим и заслуживает отдельного ответа и даже является предпочтительным, тем не менее, я думаю, копирование файлов в `/etc/systemd/` не рекомендуется, например, вы потеряете возможность *маскировать* юниты.
user10489 avatar
флаг in
@bac0n: На самом деле ты не прав. Вы маскируете единицы *путем* помещения пустого файла в /etc/systemd/, в основном заменяя системное значение по умолчанию пустым файлом. Если вы все равно помещаете туда реальный (не пустой) файл, вы можете отключить блок вместо его маскировки.
bac0n avatar
флаг cn
а куда положить отредактированный файл?
user10489 avatar
флаг in
Отредактированный файл помещается в /etc/systemd/system. Это маскирует значение по умолчанию замещающим файлом. Если вы хотите временно отключить устройство, вы можете просто отключить его, не нужно маскировать.
user10489 avatar
флаг in
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/126878/discussion-between-user10489-and-bac0n).
флаг et
@ bac0n это уже описано в [ответ муру здесь] (https://askubuntu.com/a/659268/412264), нет смысла дублировать его, ИМО ;-).
Рейтинг:-1
флаг cn

Есть некоторые недостатки хранения обычные файлы в /etc/системд/система, не из-за самого systemd, а потому что systemctl проживает в этом месте. Размещение обычных файлов в этом каталоге нарушит некоторые функции systemctl, в данном случае способность маскировать ваш .service, и нет оснований полагать, что другие приложения будут обрабатывать это по-другому. Теперь в systemd есть предопределенный набор пути поиска юнитов, большинство из которых озабочены распределение, это делает места, где вы можете разместить свой .service, в основном ограниченным (или, по крайней мере, до тех пор, пока это не будет решено):

/usr/локальные/библиотеки/systemd/система

Это работает исключительно хорошо и без потери функциональности:

# cp -a hello-world.service /usr/local/lib/systemd/system
'hello-world.service' -> '/usr/local/lib/systemd/system/hello-world.service'

# системная перезагрузка демона
# dpkg -i привет-мир_1.0-1_all.deb 
Выбор ранее невыбранного пакета hello-world.
(Чтение базы данных... На данный момент установлено 396452 ​​файла и каталога.)
Подготовка к распаковке hello-world_1.0-1_all.deb...
Распаковка hello-world (1.0)...
Настройка hello-world (1.0)...
Создал символическую ссылку /etc/systemd/system/multi-user.target.wants/hello-world.service ‒ /usr/local/lib/systemd/system/hello-world.service.

# маска systemctl hello-world
Создал символическую ссылку /etc/systemd/system/hello-world.service — /dev/null.

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

: systemctl кошка привет-мир
# /lib/systemd/system/hello-world.service
[Ед. изм]
Описание=Привет, мир (lib).

[Оказание услуг]
Тип = ваншот
ExecStart=/opt/bin/hello.sh библиотека

[Установить]
WantedBy=многопользовательская.цель

# /usr/local/lib/systemd/system/hello-world.service.d/10-local.conf
[Ед. изм]
Описание=Привет, мир (локальный).

[Оказание услуг]
ExecStart=
ExecStart=/opt/bin/hello.sh локальный

# /etc/systemd/system/hello-world.service.d/override.conf
[Оказание услуг]
ExecStart=
ExecStart=/opt/bin/hello.sh и т. д.

: systemctl запустить привет-мир
28 июня 15:20:24 betazoid systemd[1]: запуск Hello world (local)....
28 июня 15:20:24 betazoid привет[402381]: привет и т.д.
28 июня 15:20:24 betazoid systemd[1]: hello-world.service: успешно.
28 июня 15:20:24 betazoid systemd[1]: завершено Hello world (local)..
user10489 avatar
флаг in
Согласно http://0pointer.de/blog/projects/three-levels-of-off, systemd поддерживает «три уровня отключения»: служба остановлена, служба отключена, служба замаскирована. Маскировка предназначена для тех случаев, когда вы *никогда* не хотите запускать службу. Нет смысла иметь настроенный файл для службы, которую вы никогда не захотите запускать. Ваше решение просто пытается получить свой пирог и съесть его тоже.
user10489 avatar
флаг in
Каталог /usr/local/lib/systemd/system/ является целью программ, устанавливаемых вручную, для установки своих служб. В то время как обычное обновление системы не перезапишет это, повторный запуск make install для программ, у которых есть служба, перезапишет это. Правильный каталог для пользовательских служебных файлов для установки администратором: /etc/system/systemd
bac0n avatar
флаг cn
@ user10489 создайте службу и поместите ее в `/etc/systemd/system` и `маскируйте systemctl` your.service, что произойдет?
user10489 avatar
флаг in
Что произойдет, если вы наберете systemctl edit --full your.service ? Это то, что намерен systemd.
bac0n avatar
флаг cn
Да, это даст примерно такую ​​же головную боль, я понимаю, что файл должен где-то начинаться, так что на этот раз я их прощаю ;-)
user10489 avatar
флаг in
Это вам только головная боль, это ожидаемое и стандартное решение.

Ответить или комментировать

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