Timer systemctl

отображает все systemd-таймеры на системе

systemctl list-timers --all

systemctl list-timers --all | grep all_accsess

Создать собственный юнит сервиса

nano /etc/systemd/system/send_ip.service

[Unit]
Description=Send Ip This server
After=network.target

[Service]
Type=oneshot
ExecStart=/rpool/Slivak_500x10/info_server/send_ip.sh
WorkingDirectory=/rpool/Slivak_500x10/info_server/
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

[Install]
WantedBy=multi-user.target

Перезагружаем службу systemd:

systemctl daemon-reload

И пробуем запустить наш сервис:

systemctl start send_ip.service

systemctl status send_ip.service

journalctl -u send_ip.service

Unit

В [Unit] – можно указать зависимомти

Для указания строгой зависимости используйте Requires, например:

Requires=mysql.service

В случае если указанные в этой опции службы не получится запустить, запуск нашего сервиса также завершится неудачей.

Более мягкую зависимость предполагает директива Wants:

Wants=nginx.service

Если указанные службы не будут найдены или не смогут запуститься, то это никак не повлияет на работу нашего сервиса.

Обе директивы предусматривают параллельный запуск указанных в них служб.

Если к моменту запуска собственной службы какие-то сервисы уже должны быть запущены, то следует воспользоваться директивой After, скажем если нам нужно запускать службу после того, как будет поднята сеть, следует указать:

After=network.target

Service

Pдесь мы описываем нашу службу. Обязательно указываем тип, в нашем случае oneshot - одноразовый запуск и выполняемое действие в директиве ExecStart, для служб с типом oneshot таких директив можно указать несколько.

WorkingDirectory - для указания рабочей директории

Environment для задания переменных окружения

User, Group чтобы запустить сервис от указанного пользователя или группы

WorkingDirectory=/var/www
User=www-data
Group=www-data
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Install

И завершает юнит секция [Install] в которой укажем уровень запуска сервиса:

[Install]
WantedBy=multi-user.target

lti-user.target соответствует runlevel=3 или многопользовательский режим без графики.


Создать таймер

nano /etc/systemd/system/send_ip.timer

Обратите внимание, что его название соответствует файлу юнита сервиса, но имеет другое расширение.

[Unit]
Description= Send Ip This server
[Timer]
OnBootSec=1m
OnCalendar=*-*-* 02:02:00
[Install]
WantedBy=timers.target

Чтобы таймер запускался каждый день в 02:02 используем:

OnCalendar=*-*-* 02:02:00

С понедельника по пятинцу

OnCalendar=Mon..Fri *-*-* 10:33:00

Четверг, воскресенье

OnCalendar=Thu,Sun *-*-* 10:33:00

Запустить

systemctl daemon-reexec
systemctl daemon-reload
systemctl enable --now send_ip.timer
journalctl -u  send_ip.timer

Прверить результат для backup.timer

systemctl list-timers | grep backup

В секции [Timer] указываем условия запуска. Таймеры могут быть двух типов, событийные и монотонные.

Первые активируются по событию, вторые выполняются периодически. Из событийных таймеров нас будет интересовать OnBootSec, срабатывающий через указанное время после старта системы.

Из монотонных следует выделить:

Все указанные условия можно сочетать между собой. Например, чтобы указать запуск сервиса через полчаса после загрузки системы, а затем повторять каждые 15 минут укажем:

[Timer]
OnBootSec=30m
OnUnitActiveSec=15m

будет запускать .service каждые 15 минут после завершения предыдущего запуска, даже если он не был активирован ранее.

[Timer]
OnBootSec=5min
OnUnitInactiveSec=15min

link: https://interface31.ru/tech_it/2021/04/nastraivaem-taymery-systemd-vmesto-zadaniy-cron.html