Intereting Posts
Стоит ли использовать параллельные процессы вместо forking в цикле for? Назначения значений двойной кавычки, хранящиеся в CSV? Может ли Ubuntu 16.04 настроить autofs для автомонтирования / media / autousb с разрешениями на чтение и запись, если пользователь откровенен? Проблемы с кодировкой немецких справочных страниц Linux – сценарий оболочки и цветной текст Отключить ведение журнала в syslog Почему ребенок с пространством имен mount влияет на родительские установки? Как И-слова в поиске zypper? Использование команды cut для переменной окружения Сценарий оболочки останавливается автоматически примерно через 1 минуту Удаление текста с HTML-страницы Есть ли хорошие инструменты, помимо SeleniumRC, которые могут загружать веб-страницы, включая контент, расписанный JavaScript? cp и mv, если уже названный файл xterm не использует .Xresources Удаление OEM-версии Windows и повторная установка в VM

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

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

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

Начиная с версии 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 ]]