LINUX.ORG.RU
ФорумAdmin

Встроенные юниты systemd

 


1

3

Я продолжаю разбираться с systemd, и у меня возникла пара вопросов: Есть ли какой-либо способ управлять встроенными таргетами? К примеру, я хочу, чтобы при загрузке таргета rescue не загружался таргет sound, но чтобы sound загружался при multi-user? Я могу замаскировать sound, но тогда он отключается и в остальных целях.

Или противоположная задача, к примеру, я хочу создать новую цель нечто среднее между rescue и multi-user, то есть я могу переводить систему на этот уровень не загружая multi-user. Однако при загрузке multi-user загружается куча других юнитов: systemd-user-sessions.service, systemd-update-utmp-runlevel.service, systemd-logind.service и др.. Я конечно могу их покидать в mytarget.target.mants, или прописать их все в Requires и After, но можно-ли обойтись без этого, ведь в multi-user загрузка этих юнитов не прописана?


К примеру, я хочу, чтобы при загрузке таргета rescue не загружался таргет sound, но чтобы sound загружался при multi-user?

sound.target активируется из udev при обнаружении звуковых карт, вне зависимости от текущего состояния системы.

Если ты хочешь активировать sound.target только в том случае, если система в multi-user.target — можно попытаться сделать это с Requisite=, но это сработает не полностью. Точнее, сработать-то сработает, но если ты загрузишься в rescue.target, а потом захочешь перейти в multi-user.target, то sound.target тебе придётся запустить вручную.

Или противоположная задача, к примеру, я хочу создать новую цель нечто среднее между rescue и multi-user, то есть я могу переводить систему на этот уровень не загружая multi-user. Однако при загрузке multi-user загружается куча других юнитов: systemd-user-sessions.service, systemd-update-utmp-runlevel.service, systemd-logind.service и др.. Я конечно могу их покидать в mytarget.target.mants

Да, так и нужно сделать.

но можно-ли обойтись без этого, ведь в multi-user загрузка этих юнитов не прописана?

Прописана, см. /usr/lib/systemd/system/multi-user.target.wants. Если ты хочешь сделать свою цель, похожую на multi-user — тебе придётся скопировать эти симлинки (нужные из них) в .wants новой цели.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Если ты хочешь активировать sound.target только в том случае, если система в multi-user.target — можно попытаться сделать это с Requisite=, но это сработает не полностью.

Как это можно сделать, если единственный способ отключить загрузку sound - это замаскировать ее, а после этого она перестает грузиться везде?

Прописана, см. /usr/lib/systemd/system/multi-user.target.wants.

О, точно, симлинки я нашел! И как я их сразу не заметил?!

Да, так и нужно сделать.

И все же, если прописать эти юниты в mytarget.target в Requires и After, я понимаю корявость этого решения :), они ведь тоже будут загружаться, и вопрос в том - равнозначно-ли это помещению симлинков в mytarget.target.wants?

iving
() автор топика
Последнее исправление: iving (всего исправлений: 1)
Ответ на: комментарий от iving

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

Нет, не единственный. Я написал, как это можно сделать. Более того, ты это процитировал.

И все же, если прописать эти юниты в mytarget.target в Requires и After, я понимаю корявость этого решения :), они ведь тоже будут загружаться, и вопрос в том - равнозначно-ли это помещению симлинков в mytarget.target.wants?

Помещение симлинка на юнит в foo.wants эквивалентно дописыванию юнита в Wants= юнита foo. Если foo является целью — то ещё и в After=.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Нет, не единственный. Я написал, как это можно сделать. Более того, ты это процитировал

Можно по подробней, я не понимаю где нужно писать Requisite? в multi-user.target? а как тогда отключить загрузку в rescue?

iving
() автор топика
Ответ на: комментарий от iving

Requisite=multi-user.target нужно писать в sound.target.

Но, опять же:

  • так можно сделать только для одной цели (т. е. разрешить запуск sound.target одновременно в multi-user.target и в какой-либо другой цели, не являющейся наследником multi-user.target, нельзя);
  • при переходе из «запрещающей» (rescue.target) в «разрешающую» (multi-user.target) цель isolate-ом цель sound.target автоматически не запустится.
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.