Вопрос или проблема
Я использую таймер и юнит 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 <имя вашего таймера>
Это обеспечит применение новых настроек. Удачи с вашими резервными копиями!