Рецепт для systemd: принудительный перезапуск сервиса по файловому флагу

    Задача:
    • имеется некий самописный сервис, запускаемый и отслеживаемый из 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
    • +11
    • 8,1k
    • 5
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 5
    • 0
      Кто-нибудь знает в чем проблема с глючным 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
        Походит на проблему с DNS. Попробуйте «UseDNS no» в sshd_config.
        • 0
          Дождался когда ошибка стала проявляться (4 дня после рестарта).
          Прописал UseDNS no, рестартовал sshd `sudo systemctl restart sshd.service`.
          Ошибка продолжает проявляться. Вообще без изменений.

          Рестартовал сервер — логин за секунду. Жду, когда снова начнет тупить.
      • +1
        vim /etc/ssh/sshd_config

        GSSAPIAuthentication no
        UseDNS no

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