LINUX.ORG.RU

Отложенный запуск сервисов

 


0

1

Внимательно пролистал ман к systemctl , но не обнаружил в нем возможности отложить запуск сервиса.
Например, нужно задержать его на 10 секунд.

Временно сделал его по старинке с помощью cron -

@reboot sleep 10 && /usr/bin/my_service >/dev/null 2>&1

но проблема в том, что по некоторым причинам нужно реализовать его именно с помощью возможностей systemd.

Как же это сделать?

★★★★★
Ответ на: комментарий от chukcha

Можете накидать примеры этих способов?

не особо :)

[Service]
...
ExecStartPre=/usr/bin/sleep 10
ExecStart=...

но это криво

некоторые внешние устройства при быстром запуске их сервиса не успевают инициализироваться

задержка старта сервиса по идее не влияет на скорость инициализации. Имеется в виду инициализация после включения питания или подключения к интерфейсу?

Если сервис в таких случаях завершается, то можно в юните прописать ему рестарт с задержкой. Так же можно попробовать запустить с помощью правил udev после определения устройства.

xgatron
()
Ответ на: комментарий от xgatron

После включения питания системного блока с постоянно подключенными устройствами.
Поговаривают, что это из-за какого-то кривого драйвера этих устройств, но никто не берется его исправить.
Вот все и выкручиваются, как умеют.

[Service]
...
ExecStartPre=/usr/bin/sleep 10
ExecStart=...

А почему криво? ;) Возможен вариант ровнее?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Костыли.

Вот смотри: https://www.freedesktop.org/software/systemd/man/systemd.service.html#TimeoutStartSec=

Есть параметр TimeoutStartSec, через который можно задать ожидание перед запуском.

Изменить параметры можно через Drop-in.

infomeh ★★
()
Последнее исправление: infomeh (всего исправлений: 1)
Ответ на: комментарий от chukcha

А почему криво? ;)

а вдруг 10 секунд в некоторорых случаях перестанет хватать? При рестарте сервиса жди N секунд — если работаешь не один и твой товарищ не в курсе или забыл, то он может решить, что возникла какая-то проблема (systemctl ждет когда юнит отработает полностью). И т.д.

Возможен вариант ровнее?

рестарт с задержкой при падении (если сервис падает)

RestartSec=5s
Restart=on-failure #always
xgatron
()
Ответ на: комментарий от xgatron

По вашему «кривому» :) способу

[Service]
ExecStartPre=/usr/bin/sleep 10
при ребуте линукса и командах
systemctl stop  my_service
и
systemctl start  my_service
работает как часы, проверял top'ом.

Но при команде
systemctl restart  my_service
не работает вообще. Ну и ладно, не очень-то и хотелось.


Не знаю только, стоит ли добавлять перезапуск при сбоях -
RestartSec=10s
Restart=on-failure
Если он так полезен, то почему он не установлен по дефолту?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Если он так полезен, то почему он не установлен по дефолту?

он не полезен, это просто еще один костыль. Я склоняюсь к тому, что запуском после сбоя должен заниматься человек, хотя все зависит от ситуации: вылет cupsd меня не сильно волнует, а вот упавшая БД другое дело.

xgatron
()
Ответ на: комментарий от chukcha

Но при команде systemctl restart my_service не работает вообще. Ну и ладно, не очень-то и хотелось.

Ну стоило бы посмотреть systemctl status my_service и понять, почему рестарт не работает.

legolegs ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Есть гарантия что всего задержки 10 достаточно? Вдруг однажды 15 нужно будет?

++

Откуда вообще возникла потребность в задержке?

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.