У меня действительно странная проблема systemd
. Когда я выдаю systemctl restart
команду, она запускает новый процесс до того, как завершится предыдущий.
Это можно увидеть в журнале, где после сообщения о запуске («открытие журнала») регистрируется последнее сообщение о завершении работы («закрывающий журнал»).
Есть ли способ добавить задержку между остановкой и началом процесса?
systemctl stop myservice && sleep 3 && systemctl start myservice
Ответы:
В ваших служебных файлах systemd вы можете установить опцию RestartSec, чтобы добавить задержку для перезапуска. Смотрите пример ниже:
Проверьте эту ссылку для большего количества примеров.
источник
RestartSec
применяется только к службам, настроенным с помощьюRestart=
директивы, и не учитывается при выполненииsystemctl restart someservice
RestartSec, кажется, используется только в том случае, если эта конкретная служба перезапускается с помощью команды systemctl restart.
Например, у меня есть две службы, A и B.
и
Если вы перезапускаете systemctl B, он работает как положено ... но если вы перезагружаете systemctl A, обе службы останавливаются и сразу же запускаются снова, без задержки.
Systemd, очевидно, использует только значения конфигурации для одной указанной вами службы и игнорирует их для любых зависимостей.
Это не так необычно, как кажется. Если B говорит с удаленным сервером, быстрый запуск и остановка могут произойти сбой из-за отклонения клиентом удаленного конца. Но перезапуск A будет происходить каждый раз, когда A обновляется без изменения B.
Вы, вероятно, можете обойти это, добавив задержку и к A, но вам НЕ НУЖНО делать этого, поскольку это нарушает изоляцию объекта, давая A знать о B, когда это не зависимость.
источник