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] – можно указать зависимомти
Для указания строгой зависимости используйте Requires, например:
Requires=mysql.service
В случае если указанные в этой опции службы не получится запустить, запуск нашего сервиса также завершится неудачей.
Более мягкую зависимость предполагает директива Wants:
Wants=nginx.service
Если указанные службы не будут найдены или не смогут запуститься, то это никак не повлияет на работу нашего сервиса.
Обе директивы предусматривают параллельный запуск указанных в них служб.
Если к моменту запуска собственной службы какие-то сервисы уже должны быть запущены, то следует воспользоваться директивой After, скажем если нам нужно запускать службу после того, как будет поднята сеть, следует указать:
After=network.target
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] 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 |
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