оболочка Linux, поддержите задачу в течение требуемого времени

Я ищу инструмент, чтобы поддержать задачу (перезапускающий при необходимости) для указанного количества времени (в секундах) и затем уничтожить его и остановка. Например: keep_for 3600 rsync foo bar:faz если, чтобы попытка синхронизировала каталог (перезапускающий rsync в случае f.e. выделенного соединения), но явно уничтожает rsync и прекращают повторно порождать его после часа.

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

4
задан 08.05.2010, 02:52

3 ответа

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

Вот несколько битов информации от events(5) страница справочника:

  • Ручной запуск:

    запустите на <событии>
    Описывает на какой условие запустить это задание. Без этого раздела задание может только быть вручную запущено с initctl (8) команда.

  • Переикра:

    переикра
    Это устанавливает демона, сервис и флаги переикры для задания. Флаг переикры означает, что процесс будет перезапущен, когда он закончится

  • Предел переикры:

    повторно породите предел [количество [тайм-аут]]
    Это настраивает пределы переикры. Переикра ограничивает, только применяются, если флаг переикры установлен для задания; установление предела автоматически не устанавливает повторно мечущую икру возможность. Если процесс будет повторно порожден больше, чем времена количества в интервале секунд тайм-аута, то задание будет остановлено автоматически и не перезапущено. Предельные значения по умолчанию к 10 разам в течение 5 секунд.

Посмотрите начало работы.

3
ответ дан 07.12.2019, 21:29

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

-1
ответ дан 07.12.2019, 21:29

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

Я начал бы с фонового таймера подпроцесса отправлять сигнал в тайм-ауте. Обработчик сигналов завершает работу всего чисто и выходов.

Затем запустите цикл, который повторно порождает желаемую команду каждый раз, когда она выходит без успеха (нуль) из состояния.

Попытка отслеживать и тайм-аут и команду в одном цикле станет чрезмерно сложной.

0
ответ дан 07.12.2019, 21:29

Теги

Похожие вопросы