Как заставить системный таймер работать ровно каждые 10 минут, с задачей, которая длится немного дольше, чем это?

Откройте текстовый файл с помощью gedit и в диалоговом окне «Сохранить как ..» вы увидите текущую кодировку.

1
12.12.2018, 14:04
2 ответа

Похоже, что этот тип поведения на самом деле не поддерживается напрямую systemd, что имеет смысл из-за того, как он отслеживает каждую службу, которую он запускает. В итоге мне пришлось создать два идентичных сервиса, которые запускаются каждые 20 минут, а не каждые 10 минут.

Соответствующие секции таймера следующие:

myservice -даже.таймер

[Timer]
OnCalendar=*:0/20:0
Persistent=false
AccuracySec=1s

и

myservice -нечетный.таймер

[Timer]
OnCalendar=*:10/20:0
Persistent=false
AccuracySec=1s

Кроме того, я добавил RuntimeMaxSec=900к обоим сервисам, так что даже если они будут плохо себя вести, следующий раунд начнется в нужное время.

2
27.01.2020, 23:42

Если вы хотите запустить процесс асинхронно (и независимо от любого другого экземпляра ), вы можете использовать systemd-run. systemd-runсоздает временную единицу службы или объема. По умолчанию он автоматически генерирует уникальное имя для устройства.

Другими словами, служба systemd S может использовать systemd-runдля запуска процесса P. systemd-runне будет ждать завершения P (, если вы не используете параметр --wait). Процесс P не будет частью службы S. И процесс P не будет уничтожен, когда служба S остановится.

Если хотите, вы можете использовать такие параметры, как --property RuntimeMaxSec=900с systemd-run. (То, какие именно свойства можно установить с помощью systemd-run, немного различается. Я думаю, что старые версии systemd не позволяли устанавливать столько свойств переходного модуля ).

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

1
27.01.2020, 23:42

Теги

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