таймер с несколькими моментами oncalendar

Вопрос или проблема

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

Вот как это сейчас выглядит:

[Unit]
Description=Выполнять luky-borg-backup каждую ночь

[Timer]
OnCalendar=21:00
AccuracySec=1h
Persistent=yes

[Install]
WantedBy=timers.target

Должно выглядеть примерно так:

[Unit]
Description=Выполнять luky-borg-backup каждую ночь

[Timer]
OnCalendar=10:00,21:00
AccuracySec=1h
Persistent=yes

[Install]
WantedBy=timers.target

Возможно ли запустить его в несколько моментов, указав это в одном и том же таймере?

Да.

Смотрите этот фрагмент из man systemd.timer (выделено мною):

OnCalendar=

Определяет таймеры реального времени (т.е. по часам) с выражениями календарных событий. Смотрите systemd.time(7) для получения дополнительной информации о синтаксисе выражений календарных событий. В противном случае семантика аналогична OnActiveSec= и связанным настройкам.

Обратите внимание, что таймеры не обязательно истекают в точное время, заданное этой настройкой, так как это зависит от настройки AccuracySec= ниже.

Может быть указано более одного раза.

Вот рабочий пример, который я использую:

[Timer]
OnCalendar=Пн-Вс *-*-* 23:00:00
OnCalendar=Пн-Вс *-*-* 06:00:00

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

  • В руководстве systemd.time указано, что:

Каждый компонент может быть указан в виде списка значений, разделенных запятыми.

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

OnCalendar=10,21:00
  • В руководстве systemd.timer объясняется, что OnCalendar=:

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

Если несколько компонентов изменяются, то я рекомендую использовать это второе решение:

OnCalendar=Пн..Ср 10:00  
OnCalendar=Чт..Пт 21:00

Ответ или решение

Для автоматизации выполнения задачи резервного копирования с использованием таймера systemd, вы правы, что можно настроить его для работы в несколько заданных моментов времени. В вашем случае, когда вы хотите, чтобы задача запускалась как в 10:00, так и в 21:00, система предоставляет достаточно возможностей для этого.

Настройка таймера systemd

В вашем текущем конфигурационном файле вы указали:

[Unit]
Description=Run luky-borg-backup every night

[Timer]
OnCalendar=21:00
AccuracySec=1h
Persistent=yes

[Install]
WantedBy=timers.target

Эта конфигурация позволяет запускать резервное копирование только в 21:00. Чтобы добавить дополнительное время выполнения (например, 10:00), вы можете использовать несколько подходов:

1. Определение нескольких временных выражений

Согласно документации systemd, вы можете указать OnCalendar несколько раз. Это будет выглядеть так:

[Unit]
Description=Run luky-borg-backup every night

[Timer]
OnCalendar=10:00
OnCalendar=21:00
AccuracySec=1h
Persistent=yes

[Install]
WantedBy=timers.target

Этот подход прост и эффективен, так как система будет запускать таймер в любое из указанных вами временных выражений.

2. Использование одного выражения с запятыми

Еще одним способом является использование запятых для указания нескольких значений в одном выражении. С учетом вашего примера, это будет выглядеть так:

[Unit]
Description=Run luky-borg-backup every night

[Timer]
OnCalendar=10,21:00
AccuracySec=1h
Persistent=yes

[Install]
WantedBy=timers.target

Здесь запятая разделяет часы, в которые будет выполнено резервное копирование.

3. Сложные выражения с использованием диапазонов

Если вам нужно запустить резервное копирование в разные дни недели, вы можете использовать такие выражения:

[Unit]
Description=Run luky-borg-backup every night

[Timer]
OnCalendar=Mon..Sun 10:00
OnCalendar=Thu..Fri 21:00
AccuracySec=1h
Persistent=yes

[Install]
WantedBy=timers.target

Это настройка позволяет управлять выполнением задания в зависимости от дня недели и времени.

Заключение

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

Согласно документации systemd, вы можете выбирать тот, который вам кажется более удобным. Не забудьте после внесения изменений перезапустить таймер с помощью следующих команд:

systemctl daemon-reload
systemctl restart <имя вашего таймера>

Это обеспечит применение новых настроек. Удачи с вашими резервными копиями!

Оцените материал
Добавить комментарий

Капча загружается...