Как настроить 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 ]] 
  • Cron vs systemd таймеры
  • «Systemctl list-timers» показывает последние выполненные даты, которые далеки в будущем
  • системный таймер каждые 2 часа через 30 минут после часа?
  • Есть ли способ узнать, когда будет запускаться системный таймер?
  • Запуск пользовательского таймера systemd, когда у них нет открытого сеанса
  • systemd запустить блок на успех другого
  • Поручить выполнить блок после успешного завершения работы другого устройства
  • Удаление таймера, созданного с помощью systed-run --on-calendar
  • systemd.unit `RequiresMountsFor =` vs `ConditionPathIsDirectory =`
  • Interesting Posts

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

    Конкретный способ вывода в файл, если задан аргумент, в stdout в противном случае

    Автоматическое резервное копирование и исключение определенных папок

    Командная строка SQLite: как вы подключаете вывод к утилите UNIX?

    Пути TCP / IP при использовании нескольких серверов DHCP

    Интерфейс GUI AUR и pacman GUI для Arch

    Создать анимированный файл WebP из файлов WebP?

    Почему Linux на архитектуре sparc64 использует 32-разрядные указатели в пользовательском пространстве и 64-битные указатели в пространстве ядра?

    Как изменились эти настройки по умолчанию для Linux TCP?

    перезагрузка с одноразовыми параметрами ядра

    как закончить последовательность tmux после переключения панелей

    Помещение подоболочки в фоновом режиме вместо ввода команды в фоновом режиме

    Включить поддержку udev и speex для pulseaudio

    Какие дистрибутивы поддерживают пакет ядра с поддержкой grsecurity

    Как заставить GNOME 3 работать в Debian Wheezy под VMware?

    Linux и Unix - лучшая ОС в мире.