LINUX.ORG.RU
решено ФорумAdmin

systemd: зависимости

 


2

5

Всех приветствую.

Возникла нужда настроить зависимости пары юнитов.

unit1:

[Unit]
Description=unit1
TimeoutSec=20
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

unit2:

[Unit]
Description=unit2
Requires=unit1
After=unit1
TimeoutSec=20
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

Тоже самое словами (по крайней мере то, что я хочу получить).

unit1 стартует сам по себе и ни от кого не зависит.

unit2 стартует только после uni1, и работает только если работает unit1. Иногда unit1 может останавливаться или рестартовать. И мне нужно, чтобы unit2 при останове первого тоже останавливался, но при старте первого так же поднимался. Пока что, с такими настройками, первоначальный старт нормальный, а вот запуск второго после рестарта первого не происходит.

Внимание вопрос, что нужно написать в правила для второго чтобы он как привязанный ходил за первым сервисом?

★★★★★

Ответ на: комментарий от yax123

Неправильно написал. Перетестил, так должно работать, по крайней мере на сервисах. Остальное не пробовал. Если разберешься, дай знать, мне тоже тема интересна.

cat s1.service s2.service 
[Unit]
Description=
BindsTo=s2.service

[Service]
ExecStart=echo hello

[Install]
WantedBy=defaults.target
[Unit]
Description=
PartOf=s1.service

[Service]
ExecStart=echo hello2

[Install]
RequiredBy=s1.service

s1 - основной, s2 - зависимый. disable, правда, не работает.

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

То есть мы в s1 (который по идее вообще ни о ком не должен знать) добавляем зависимость от s2 (в том смысле, что сообщаем ему, что от него зависит s2). Решение может быть и рабочее, но оно в корне не верное. Если сервис от кого-то зависит, то это его личное дело, и об этом не нужно знать тому от кого зависят.

yax123 ★★★★★
() автор топика

Ну чтож. Как это обычно бывает, хочешь сделать хорошо - делай сам.

Правильное рабочее решение.

unit1:

[Unit]

Description=unit1
TimeoutSec=20
Restart=on-failure
RestartSec=5
[Service]
ExecStart=unit1.app

[Install]
WantedBy=multi-user.target

unit2 (зависит от unit1):

[Unit]
Description=unit2
Requires=unit1
After=unit1
TimeoutSec=20
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
WantedBy=unit1                   <-- здесь задается зависимость от unit1
  1. restart unit1 - приводит к рестарту unit2 (это работает и на исходном случае)

  2. start/stop unit1 - приводит к рестарту unit2 только если есть Install->WantedBy=unit1

  3. killall unit1.app - приводит к рестарту сервиса unit1 через RestartSec. После чего автоматом рестартится unit2.

То что мне и было нужно.

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

Ну так тебе это еще раньше подсказали

без указания секции где размещать WantedBy за подсказку не считается. Это работает только для секции [Install]

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

Где размещать ман читать надо. тебе говорят мой руки перед едой, без указания того что не в унитазе а в умывальнике не считается

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

Где размещать ман читать надо.

Я сюда пришел за разъяснениями мана, а не за очевидным RTFM.

Аноним, все так же чуть более чем полностью бесполезен.

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

Если тебе это надо еще и разьяснять, то у меня для тебя плохие новости

Ман

Note: WantedBy= and RequiredBy= are used in the [Install] section to create symlinks in .wants/ and .requires/ directories. They cannot be used directly as a unit configuration setting.

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

То есть ты намекаешь на то, что форвард-столбик относится к unit, а реверс к install?

yax123 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.