Назад | Перейти на главную страницу

Как добиться непрерывного перезапуска с помощью systemd?

У меня 2 сервера запущены как независимые единицы systemd. Они прослушивают порт 3001 и 3002 соответственно.

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

Вот последовательность событий, которые я ищу при запуске приложения systemctl restart:

  1. app-unit1 работает && app-unit2 работает
  2. app-unit1 остановлен
  3. app-unit1 запущен
  4. app-unit2 остановлен
  5. app-unit2 запущен

Таким образом, установив балансировщик нагрузки перед этими серверами, я могу перезагрузить эти серверы, не прерывая глобальную службу.

Я реализовал конфигурацию, описанную в Эта статья:

/etc/systemd/system/app.service

[Unit]
Description=app
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

/etc/systemd/system/app-unit1.service

[Unit]
Description=app-unit1
PartOf=app.service
After=app.service

[Service]
Type=notify

Environment=PORT=3001
ExecStart=/usr/bin/start-server.sh
Restart=on-failure

[Install]
WantedBy=app.service

/etc/systemd/system/app-unit2.service

[Unit]
Description=app-unit2
PartOf=app.service
After=app.service
After=app-unit1.service

[Service]
Type=notify

Environment=PORT=3002
ExecStart=/usr/bin/start-server.sh
Restart=on-failure

[Install]
WantedBy=app.service

Результирующая последовательность событий при запуске приложения systemctl restart:

  1. app-unit1 работает && app-unit2 работает
  2. app-unit2 остановлен && app-unit1 остановлен (не уверен, какой из них остановлен первым)
  3. app-unit1 запущен
  4. app-unit2 запущен

Итак, у меня перерыв в обслуживании между шагом 2 и шагом 3.

Возникает вопрос: как добиться непрерывного перезапуска с помощью systemd?