Я ищу инструмент, чтобы поддержать задачу (перезапускающий при необходимости) для указанного количества времени (в секундах) и затем уничтожить его и остановка. Например: keep_for 3600 rsync foo bar:faz
если, чтобы попытка синхронизировала каталог (перезапускающий rsync в случае f.e. выделенного соединения), но явно уничтожает rsync и прекращают повторно порождать его после часа.
Я пытался записать сценарий оболочки для этого, но было удивительно трудно записать с большим количеством пограничных случаев (как дочерний процесс, не уничтожаемый или проблемы выхода оболочки). Так..., возможно, там уже инструмент для этого?
Если Ваша система имеет Выскочку, можно создать файл событий для сценария/команды, и это может сделать то, что Вы хотите (если не теперь затем возможно в будущей версии, использующей запланированные функции).
Вот несколько битов информации от events(5)
страница справочника:
Ручной запуск:
запустите на <событии>
Описывает на какой условие запустить это задание. Без этого раздела задание может только быть вручную запущено с initctl (8) команда.
Переикра:
переикра
Это устанавливает демона, сервис и флаги переикры для задания. Флаг переикры означает, что процесс будет перезапущен, когда он закончится
Предел переикры:
повторно породите предел [количество [тайм-аут]]
Это настраивает пределы переикры. Переикра ограничивает, только применяются, если флаг переикры установлен для задания; установление предела автоматически не устанавливает повторно мечущую икру возможность. Если процесс будет повторно порожден больше, чем времена количества в интервале секунд тайм-аута, то задание будет остановлено автоматически и не перезапущено. Предельные значения по умолчанию к 10 разам в течение 5 секунд.
Посмотрите начало работы.
Я разделил бы задачи, сохранив их в том же сценарии (я думал об этом как о программе C, но это должно быть выполнимо как сценарий).
Я начал бы с фонового таймера подпроцесса отправлять сигнал в тайм-ауте. Обработчик сигналов завершает работу всего чисто и выходов.
Затем запустите цикл, который повторно порождает желаемую команду каждый раз, когда она выходит без успеха (нуль) из состояния.
Попытка отслеживать и тайм-аут и команду в одном цикле станет чрезмерно сложной.