Задача:
  • имеется некий самописный сервис, запускаемый и отслеживаемый из systemd;
  • необходимо при появлении файла-флага рестартовать этот сервис;
  • делать это изнутри сервиса нельзя по религиозным соображениям.

Решение:
restart-myservice.service
[Unit]
Description=Restart my cool service

[Service]
Type=oneshot
ExecStartPre=/bin/rm -f /path/to/restart.flag
ExecStart=/bin/systemctl restart myservice.service


restart-myservice.path
[Unit]
Description=Path marker to restart my cool service

[Path]
PathExists=/path/to/restart.flag
Unit=restart-myservice.service


Не забудьте сказать systemctl start restart-myservice.path и прописать restart-myservice.path в параметр Wants управляемого сервиса.

Ограничения:
Юнит path работает через системный вызов notify, и если флаг по пути с симлинком, то при перестановке симлинка (был на каталог без флага, стал с флагом) он скорее всего не выстрелит, я не проверял.

Дополнительные материалы:
man systemd.path
man systemd.unit

Комментарии (5)


  1. SamSol
    17.12.2015 20:42

    Кто-нибудь знает в чем проблема с глючным systemd-logind.service?
    Симптомы

    1. медленный логин по ssh (~20 секунд)
    2. в логах journald такие сообщения:
      dbus[633]: [system] Failed to activate service 'org.freedesktop.login1': timed out
      sshd[10643]: pam_systemd(sshd:session): Failed to create session: Failed to activate service 'org.freedesktop.login1': timed out

    После рестарта командой

    sudo systemctl restart systemd-logind.service

    на несколько дней все приходит в норму.
    Сервер без нагрузки: 2-3 ssh сессий в минуту (git) «Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic i686)».


    1. evg_krsk
      18.12.2015 03:14
      +1

      Походит на проблему с DNS. Попробуйте «UseDNS no» в sshd_config.


      1. SamSol
        22.12.2015 16:12

        Дождался когда ошибка стала проявляться (4 дня после рестарта).
        Прописал UseDNS no, рестартовал sshd `sudo systemctl restart sshd.service`.
        Ошибка продолжает проявляться. Вообще без изменений.

        Рестартовал сервер — логин за секунду. Жду, когда снова начнет тупить.


        1. 6opoga
          22.12.2015 16:36

          Похоже, Вы наступили на этот баг:
          bugs.debian.org/cgi-bin/bugreport.cgi?bug=770135
          bugs.debian.org/cgi-bin/bugreport.cgi?bug=793814
          Лекарства пока нет, там в комментах кто-то скрипт наваял для авторестарта.


    1. wmlex
      18.12.2015 08:47
      +1

      vim /etc/ssh/sshd_config

      GSSAPIAuthentication no
      UseDNS no