Теперь решил написать продолжение своей статьи об анакроне. Речь опять пойдет о запуске задач по расписанию, но уже с помощью другого инструмента, а именно — systemd. Так как этот универсальный воин присутствует по умолчанию в системе (в первую очередь речь идет об archlinux) и предоставляет нужный функционал. В статье опишу как я заменил и cron, и anacron на systemd таймеры. Так как когда более пришлось столкнуться с таймерами системд, обнаружилось что информации на русском языке по этому справу крайне мало. Поэтому — мои пять копеек.
Systemd позволяет создавать два вида таймеров (прибор производственно-технического, военного или бытового назначения, в заданный момент времени выдающий определённый сигнал либо включающий/выключающий какое-либо оборудование через своё): монотонные и таймеры реального времени. Для каждого вида существуют свои опции, комбинировать какой-никакие в одном таймере нельзя.
Однотонные таймеры позволяют запускать сервис при загрузке системы (нечто вроде автозапуска). Из настроек монотонных таймеров коснусь только этой:
[Timer]
OnBootSec=
Она дозволяет задавать заминку запуска сервиса после старта системы. Чаще всего утилизируется для равномерного расположения стартующих одновременно приложений.
В таймерах реального времени больше увлекательных опций. Пример эта:
OnCalendar=mon-fri 9/2:20
Задает время выполнения сервиса. В данном варианте сервис станет выполняться каждый день кроме выходных начиная с девяти 20 утра и дальше через каждые два часа.
Persistent=true
Эта опция задает действие системд таймера сходственно анакрону. То есть если в момент выполнения таймера пк был выключен, то таймер запустится сходу после следующего старта системы, а далее по расписанию, данному в секции [Timer].
Еще одна функция, которую опишу:
RandomizedDelaySec=30min
Она задает случайное время в спектре от 0 до определенного в этой строчке (в данном примере 30 минут) которое таймер станет ждать перед исполнением сервиса.
В сумме получается например такой systemd backup. timer:
[Unit]
Description=Запуск backup-скрипта
[Timer]
OnCalendar=mon-fri 9/3:20
RandomizedDelaySec=15min
Persistent=true
[Install]
WantedBy=timers. target
Какой-никакой будет запускать одноименный backup сервис (если в таймере не задан явно сервис с другим именем) ежедневно по будням начиная с девяти двадцати утра и далее другие три часа со случайной задержкой перед запуском до пятнадцати минут. Кроме этого, когда компьютер будет выключен во время очередного запуска сервиса, то он запустится сразу при следующем включении.
По замене крона и анакрона таймерами все. Теперь пару слов о совмещении опций таймеров реального времени и монотонных. Если вдруг нужно запускать сервис при старте пк, то пригодится монотонный таймер с опцией OnBootSec=. Но если нужно запускать этот сервис при старте пк каждый день кроме выходных, тут бы подошел таймер реального времени. Для их наложения мне на ум доводит пока что (костыль конечно, но что делать…) создание дополнительного таймера настоящего времени, какой бы активировал в понедельник в полночь и деактивировал в пятницу в полночь монотонный таймер.

