systemctl не может точно сообщить о статусе демонов, если они были запущены с помощью механизма, отличного от systemctl

Существует два механизма запуска / остановки моей программы «abc»,

  1. системный файл systemctl внутри /usr/lib/systemd/system/abc.service
  2. / etc / abc init скрипт abc вызовет всех демонов. Но статус systemctl не является точным, когда я запускаю / останавливаю демоны, используя / etc / abc

Чтобы исправить это, я добавил Type = forking и добавил директиву PIDFile. Он решает проблему остановки. Статус systemctl будет отображаться неактивно, когда я останавливаю демонов, используя скрипт abc init. Таким образом, проблема частично исправлена. Но он все равно будет неактивным, когда я запустил демонов, используя скрипт abc init.

Как я могу решить эту проблему? Я попытался представить файл abc.path, который проверяет наличие файла и затем уведомляет об этом службу. Но это не помогает.

Использование systemd 219.

One Solution collect form web for “systemctl не может точно сообщить о статусе демонов, если они были запущены с помощью механизма, отличного от systemctl”

Конечно.

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

справочная информация о механизмах совместимости фургонов

дальнейшее чтение: https://unix.stackexchange.com/a/233581/5132

Механизм совместимости rc van Smoorenburg, предоставляемый systemd, является генератором . Это гарантирует, что существует сгенерированная служба abc.service которая запускает /etc/init.d/abc start службы и /etc/init.d/abc stop при остановке службы.

Обратите внимание, что на этом этапе существование /usr/lib/systemd/system/abc.service полностью предотвращает генерацию abc.service генератором systemd.

Это полная степень совместимости van Smoorenburg rc в ванильной системе d. Возможность для суперпользователя напрямую ссылаться на /etc/init.d/abc различными способами и поддерживать соединение с systemd в качестве дополнения к vanilla systemd отдельными разработчиками операционной системы.

Например, люди Debian и Ubuntu предоставляют крючок в своей собственной подсистеме /lib/lsb/init-functions.d/ которая действует следующим образом:

  • Если крючок обнаруживает, что скрипт init.d вызывается как ExecStart / ExecStop сгенерированной службы systemd, он ничего не делает и просто запускает остальную часть скрипта в том виде, в каком он стоит.
  • Если крючок обнаруживает, что скрипт init.d вызывается напрямую, а не как часть сгенерированной службы systemd, он преобразует /etc/init.d/ name verb в systemctl verb name и переключается на него, а не запускает остальную часть скрипт. (Некоторые глаголы, которые он проходит, но вы говорите о start и stop , которые обрабатываются описанным здесь способом.)

при отсутствии механизмов совместимости

Не все операционные системы имеют такой механизм совместимости с мотором van Smoorenburg, который преобразует прямой вызов /etc/init.d/ name verb в способ работы системы. Некоторые операционные системы (например, одна из которых запускается человеком в « Почему« init 0 »приводит к« избыточным аргументам »на установке Arch? », Например, не обеспечивает совместимость с van Smoorenburg rc вообще , не предоставляя такой крючок, как Debian's / Ubuntu и даже полностью отключить механизм совместимости, который поставляется с vanilla systemd.

В такой операционной системе запуск сценария van Smoorenburg rc напрямую запускает этот сценарий как есть.

Такой скрипт не запускает службу под управлением службы. Он делает такие вещи, как двойное форсирование и многое другое, напрасно и в большинстве случаев бесплодные попытки работать в той же среде, в которой работают фактические сервисные dæmons. (Большая часть этого так называемого «dæmonization» материала не работает и не работает с 1980-х годов, что является причиной того, что в начале 1990-х годов были изобретены надлежащие системы управления dæmon.) Но что касается управления услугами, это просто суперпользователь в интерактивном сеансе входа в систему.

В самом деле, systemd рассмотрит такие непосредственно вызванные скрипты vc smoorenburg rc и все тщетные «dæmonized» программы, которые они отключают в фоновом режиме, которые будут выполняться как часть интерактивной области сеанса пользователя внутри среза пользователя, а не как службы, которые работают с пользовательские сеансы в системном срезе .

Хуже того, он заканчивается использованием крайне ошибочных механизмов системы van Smoorenburg rc , таких как уничтожение всех процессов, выполняемых в любом месте, которые соответствуют имени службы при остановке службы, а не только определенные процессы обслуживания, которые запускался и отслеживает диспетчер служб. Именно поэтому для вас работает установка /etc/init.d/ name stop . Сценарий убивает все процессы, которые соответствуют имени, которое, как оказалось, также включает процессы, выполняемые под менеджером службы. Это неизбирательное убийство всего – ошибка, хотя и не особенность. Это всего лишь появление надлежащей функциональности, и это укусит вас в дороге, так как за последние несколько десятилетий укусили так много системных администраторов.

правильная вещь, чтобы сделать

Если вам не хватает таких механизмов совместимости, то не вызывайте непосредственно скрипты van Smoorenburg rc . Это так просто. Используйте команды service или systemctl для связи с управлением службой systemd; но не запускайте /etc/init.d/ anything непосредственно для остановки, запуска и получения статусов служб.

Подчиненная точка заключается в том, что вы не должны сбрасывать с помощью /usr/lib/systemd/system/abc.service чтобы попытаться использовать скрипт van Smoorenburg rc в виде работы. Type=forking почти наверняка не соответствует вашему сервису. (Это не соответствует практически всем фактическим услугам в дикой природе.) И если людям, которые придумали /usr/lib/systemd/system/abc.service удалось избавиться от хорошо известного PID файловый механизм, который абсолютно не нужен для истинного управления сервисами, он совершенно невозмутим, чтобы снова вернуть его обратно.

дальнейшее чтение

  • Джонатан де Бойн Поллард (2015). Проблемы с протоколом готовности к работе с Unix dæmons . Часто задаваемые ответы.
  • Джонатан де Бойн Поллард (2015). «Наследование и заблуждение демонализации» . Больше никаких проблем с командой «service» . перекус. Программное обеспечение JdeBP.
  • Джонатан де Бойн Поллард (2001). Ошибки, которых следует избегать при разработке программ Unix dæmon . Часто задаваемые ответы.
  • https://unix.stackexchange.com/a/200365/5132
  • как systemd определяет, что служба остановлена?
  • сценарии обслуживания и системного сценария – которые можно использовать
  • Как заставить систему войти в аварийный режим?
  • Что значения, принимаемые «OnFailureJobMode =», означают в файлах systemd unit
  • Как выполнить синтаксический анализ / proc / cmdline перед запросом имени tty с помощью systemd
  • Как окончательно отключить запрос root-password для режима восстановления, RHEL7
  • После перехода на Devuan, как удалить systemd?
  • Удев и прятался
  • Можно ли вручную выполнить единый системный таймер-парный сервисный модуль для целей тестирования?
  • Изменить имя хоста для systemd на Fedora 25
  • systemd: Как авторизовать файловую систему USB с помощью / etc / fstab?
  • Запуск nginx при загрузке с помощью systemd, Raspbian 8 (jessie)?
  • Отключить неверно настроенные сетевые настройки в systemd с помощью etckeeper?
  • Interesting Posts

    не удалось смонтировать сгоревшую файловую систему ISO9660 до извлечения и повторной установки носителя

    Как создать архив ccio ASCII (SVR4 без CRC)?

    SELinux – разрешает доступ к открытым / прочитанным rsyslog к некоторым файлам

    кот случайно висит в .zshenv

    emacs копировать и вставлять

    Как показать номера строк в vim в правой части буфера?

    ловить ядро ​​паника

    Не удается установить debian, потому что установщик не анализирует IP правильно?

    Запуск нескольких команд в режиме просмотра

    Как создать эту функцию для выбора случайной переменной из массива?

    У меня есть Debian на моем сервере. Должен ли я использовать версию программного обеспечения Centos или Ubuntu, которую мне нужно установить?

    CURL не будет подключаться к себе

    Переключить статус уведомления Skype

    Как установить wine-1.4 в sid repo?

    Система утверждает, что мой USB установлен, когда я вставляю его, и я не могу (un) смонтировать его. Как это исправить?

    Linux и Unix - лучшая ОС в мире.