[Unit]
Description=run test service
[Timer]
OnCalendar=Sat *-*-* 00:00:01
Unit=test.service
Persistent=true
[Install]
WantedBy=timers.target
В примере выше все работает отлично. Но мне нужно загрузить свою систему Linux до 10 часов утра.
Моя цель —: Я хочу загружать Debian 10 в любое время каждую субботу, а затем запускать скрипт во время загрузки. Если я перезагружу свою машину Linux два или три раза в субботу (в один и тот же день), я не хочу запускать скрипт снова, только один раз. Возможно ли сделать это с помощью systemd?
Моя ОС Gnu-Linux — этоDebian GNU/Linux 10 (уничтожитель)и systemctl --version этосистемный 241 (241)
решение1
«Linux os» — слишком общее названиечтобы иметь возможность диагностировать вашу конкретную систему. Пожалуйста, выполните следующие четыре команды и сообщите результаты (включая ошибки, если команда недоступна). Отчет покажет, какая разновидность "linux os" установлена и какая версия systemd запущена:
lsb_release -a
systemctl --version
/sbin/init --version
busctl --system get-property org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
Version
В текущей (по состоянию на август 2019 г.) версии systemd
Установите таймер реального времени на любое время в субботу.
OnCalendar=Sat *-*-* 00:00:01
И удали монолитный таймер.
OnBootSec=2
Эффект
Persistent=true
заключается в том, что система будет пытаться выполнить скрипт один раз в неделю после 00:00:01 каждую субботу. Скрипт будет запускаться только один раз каждую субботу, и обычно это будет первый раз, когда он будет загружен. Он будет запущен в любой другой день недели, если система не была включена в субботу, и он запустится в 00:00:01, если система была оставлена на ночь в пятницу.
- http://manpages.ubuntu.com/manpages/xenial/man5/systemd.timer.5.html
- https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.timer.5
Постоянный=
Принимает логический аргумент. Если true, время последнего срабатывания сервисного блока сохраняется на диске. Когда таймер активируется, сервисный блок запускается немедленно, если он должен был сработать хотя бы один раз в то время, когда таймер был неактивен. Это полезно для наверстывания пропущенных запусков сервиса, когда машина была выключена. Обратите внимание, что этот параметр влияет только на таймеры, настроенные с помощью OnCalendar=. По умолчанию false.