1

У меня есть mybackups.service и mybackups.timer . Я бы хотел, чтобы у mybackups.service был только один работающий экземпляр. То есть я хочу, чтобы произошло следующее:

Случай 1: таймер уже mybackups.service

Если по какой-то причине я запускаю резервное копирование вручную, $ systemctl start mybackups.service Я хочу, чтобы systemctl сказал «Пропуск, уже запущен»

Случай 2: я вручную mybackups.service

Когда mybackups.timer пытается запустить свой сервис по расписанию, я бы хотел, чтобы он был остановлен с помощью systemd с некоторой зарегистрированной ошибкой, например: mybackups.service was already in progress

Случай 3: длительное обслуживание

Очевидно, что я надеюсь исправить такое засорение, но если по какой-то причине mybackups.service будет работать очень долго, я надеюсь, что следующий старт mybackups.timer получит то же лечение, что и в случае № 2 (то есть: I ' надеюсь, что он не запустится * другой * сервис запускается)

Т.Л., д - р я мог у меня) изменить основную программу , которая mybackups.service начинает просто выйти , когда он находит старый PID файл и все еще живой PID где - то. Однако это такая общая проблема, которую я ожидаю [2] и надеюсь, что у systemd есть варианты для этого.

[2]: например, systemd уже отслеживает все PID-дерево своих сервисов, и кажется, что это идеальный кандидат, чтобы сделать это правильно для вас.

1 ответ1

1

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


(На самом деле, для достижения обратного вам потребуются шаблонные модули, например, foo@.service может быть запущен несколько раз с разными параметрами. Тем не менее, каждая такая единица все еще остается уникальной; Например, systemd также не запустит две копии foo@bar.service .)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .