Как настроить Systemd Timer для запуска службы в последний день месяца

Я хочу запустить файл службы в последний день каждого месяца. Как это настроить? Я имею в виду Systemd.timers, но не могу найти правильный подход.

Кроме того, можно будет добавить еще одну конфигурацию для запуска в последний рабочий день месяца? (дней, кроме солнца и сидел)

2 Solutions collect form web for “Как настроить Systemd Timer для запуска службы в последний день месяца”

Начиная с версии 233, systemd поддерживает использование «~» в своем синтаксисе календаря для указания дат относительно конца месяца.

OnCalendar=*-02~03 означает третий последний день февраля (26 или 27-й, в зависимости от того, является ли он високосным годом)

Mon *-05~07/1 Mon *-05~01..07 и Mon *-05~01..07 являются синонимами в последний понедельник мая.

https://github.com/systemd/systemd/blob/v233/NEWS#L174

Самое простое решение, вероятно, использовать таймер, который работает каждый день, и проверяет, будет ли завтра 1-го числа месяца. Что-то вроде:

mytimer.timer:

 [Unit] Description=run mytimer.service daily at 6am [Timer] OnCalendar=6:00 Persistent=true [Install] WantedBy=timers.target 

mytimer.service:

 [Unit] Wants=mytimer.timer Description=run on last day of month [Service] Type=oneshot ExecStart=/bin/bash -c '[ $(date --date=tomorrow +%d) -eq 1 ] && \ /bin/myscript' 

В течение последнего рабочего дня месяца я вычисляю его как: смотрю 3 дня в будущем и проверяю, является ли дата третьей, а день – с четверга по понедельник включительно или дата 1 или 2, а день Понедельник. Эквивалентный тест bash с использованием даты и% w для дня недели (0 = воскресенье) будет

 [[ $(date --date=+3days +%d%w) =~ 03[45601]|011|021 ]] 
  • Запуск пользовательского таймера systemd, когда у них нет открытого сеанса
  • Синхронизировать почту с помощью offlineimap через службу / таймер systemd; получение пароля из гнома
  • Периодически выполняемый btrfs-scrub
  • systemd: Как выполнять задание как периодически, так и один раз при завершении работы системы?
  • Таймер Systemd, срок действия которого истек
  • Каков правильный способ отключения блока таймера systemd?
  • Linux и Unix - лучшая ОС в мире.