LINUX.ORG.RU

пред запуск процессов systemd

 , ,


0

1

как заставить пользовательские systemd, что бы он запускал определенные процессы перед запуском других процессов? делаю так

systemctl --user cat resque-worker.target
# /home/deploy/.config/systemd/user/resque-worker.target
[Unit]
Requires=resque-metro.target resque-prisma.target

[Install]
WantedBy=default.target
systemctl --user cat resque-metro.target
# /home/deploy/.config/systemd/user/resque-metro.target
[Unit]
Description=METRO [staging]
Requires=resque-metro@1.service
Requires=resque-metro@2.service
Requires=resque-first.target
After=resque-first.target
PartOf=resque-worker.target

[Install]
RequiredBy=resque-worker.target
systemctl --user cat resque-prisma.target
# /home/deploy/.config/systemd/user/resque-prisma.target
[Unit]
Description=PRISMA [staging]
Requires=resque-prisma@1.service
Requires=resque-first.target
After=resque-first.target
PartOf=resque-worker.target

[Install]
RequiredBy=resque-worker.target
systemctl --user cat resque-first.target
# /home/deploy/.config/systemd/user/resque-first.target
[Unit]
Description=MAIL [staging]
Requires=resque-mail@1.service 
Requires=resque-mail@2.service 
Requires=resque-mail@3.service 
Requires=resque-mail@4.service 
PartOf=resque-metro.target resque-prisma.target

[Install]
RequiredBy=resque-metro.target resque-prisma.target

но все равно все target’ы стартуют одновременно, а надо сначала, что бы запустился resque-first.target, а потом уже resque-metro.target и resque-prisma.target


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

Расставить Before=/After= между требуемыми юнитами. Другого не дано.

все равно все target’ы стартуют одновременно, а надо сначала, что бы запустился resque-first.target, а потом уже resque-metro.target и resque-prisma.target

Ты не въезжаешь в семантику зависимостей в systemd. Зависимости порядка не «наследуются» между юнитами.

Если у тебя есть A.target, который зависит от a.service, а также B.target, который зависит от b.service и A.target, и ты запускаешь B.target, то в этом графе зависимостей ничего не говорит о взаимном порядке запуска a.service и b.service. systemd не будет ждать успешного запуска A.target перед тем, как запускать b.service. В результате a.service и b.service стартуют одновременно.

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

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

спасибо большое за ответ, я вчера в итоге к этому и пришел, получилось вот так

systemctl --user cat resque-worker.target
# /home/deploy/.config/systemd/user/resque-worker.target
[Unit]
Requires=resque-metro.target resque-prisma.target
[Install]
WantedBy=default.target

systemctl --user cat resque-metro.target
# /home/deploy/.config/systemd/user/resque-metro.target
[Unit]
Description=Resque Queue METRO [staging]
Requires=resque-metro@1.service
Requires=resque-metro@2.service
Requires=resque-first.target
After=resque-first.target
PartOf=resque-worker.target
[Install]
RequiredBy=resque-worker.target

systemctl --user cat resque-prisma.target
# /home/deploy/.config/systemd/user/resque-prisma.target
[Unit]
Description=Resque Queue PRISMA [staging]
Requires=resque-prisma@1.service
Requires=resque-first.target
After=resque-first.target
PartOf=resque-worker.target
[Install]
RequiredBy=resque-worker.target

systemctl --user cat resque-first.target
# /home/deploy/.config/systemd/user/resque-first.target
[Unit]
Description=Resque First-Place MAIL [staging]
Requires=resque-mail@1.service
Requires=resque-mail@2.service
Requires=resque-mail@3.service
Requires=resque-mail@4.service
PartOf=resque-metro.target resque-prisma.target
[Install]
RequiredBy=resque-metro.target resque-prisma.target

systemctl --user cat resque-metro@.service
# /home/deploy/.config/systemd/user/resque-metro@.service
[Unit]
Description=Resque Worker METRO positions %I [staging]
After=resque-first.target
PartOf=resque-metro.target
[Service]
Type=forking
WorkingDirectory=/home/deploy/current
Environment="RBENV_ROOT=$HOME/.rbenv"
Environment="RBENV_VERSION=2.4.6"
Environment="RACK_ENV=staging"
Environment="RAILS_ENV=staging"
Environment="BACKGROUND=yes"
Environment="INTERVAL=5"
Environment="QUEUE=metro"
Environment="COUNT=1"
ExecStart=/home/deploy/.rbenv/shims/bundle exec rake resque:workers
SyslogIdentifier="resque-worker metro"
[Install]
RequiredBy=resque-metro.target

systemctl --user cat resque-prisma@.service
# /home/deploy/.config/systemd/user/resque-prisma@.service
[Unit]
Description=Resque Worker PRISMA positions %I [staging]
After=resque-first.target
PartOf=resque-prisma.target
[Service]
Type=forking
WorkingDirectory=/home/deploy/current
Environment="RBENV_ROOT=$HOME/.rbenv"
Environment="RBENV_VERSION=2.4.6"
Environment="RACK_ENV=staging"
Environment="RAILS_ENV=staging"
Environment="BACKGROUND=yes"
Environment="INTERVAL=5"
Environment="QUEUE=prisma"
Environment="COUNT=1"
ExecStart=/home/deploy/.rbenv/shims/bundle exec rake resque:workers
SyslogIdentifier="resque-worker prisma"
[Install]
RequiredBy=resque-prisma.target

systemctl --user cat resque-mail@.service
# /home/deploy/.config/systemd/user/resque-mail@.service
[Unit]
Description=Resque Worker MAIL positions %I [staging]
PartOf=resque-first.target
[Service]
Type=forking
WorkingDirectory=/home/deploy/current
Environment="RBENV_ROOT=$HOME/.rbenv"
Environment="RBENV_VERSION=2.4.6"
Environment="RACK_ENV=staging"
Environment="RAILS_ENV=staging"
Environment="BACKGROUND=yes"
Environment="INTERVAL=5"
Environment="QUEUE=mail"
Environment="COUNT=1"
ExecStart=/home/deploy/.rbenv/shims/bundle exec rake resque:workers
SyslogIdentifier="resque-worker mail"
[Install]
RequiredBy=resque-first.target
Garcia
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.