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.

  • В journald, почему некоторые записи журнала sshd не относятся к ssh.service
  • Установить службу systemd для запуска после монтирования fstab
  • Крепление Systemd с условием
  • Каким интерфейсом привязывается nspawn по умолчанию?
  • systemd: spawn gettys ASAP
  • Параметры времени выполнения для службы systemd
  • Авто полностью не работает на Fedora
  • Запуск программы в качестве услуги или напрямую, какая разница
  • 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 определяет, что служба остановлена?
    • сценарии обслуживания и системного сценария – которые можно использовать
    Interesting Posts

    Предупреждение mdoc: пустая строка ввода #xx

    История версий GNU Sed (журнал изменений) – как вы можете определить, какая функция была введена в какой версии?

    Как я могу подсчитать количество слов в файле, редактируя файл в vim

    Используйте AWK для разделения подстроки на последние n символов на новый столбец

    Почему я получаю непоследовательные значения IP от icanhazip.com или curlmyip.com?

    моя команда разрешений работает неправильно

    Как узнать, какие драйверы файловой системы скомпилированы в ядре linux?

    Использовать вход xargs в команде eval

    В чем разница между вставкой с помощью средней кнопки мыши и Shift + Ins?

    Планирование распространения на основе Ubuntu: SKEL не может быть прочитан обычным пользователем внутри живой системы

    войдите в ec2, используя SSH, но sudo запрашивает пароль

    Как обмениваться словами в имени файла с помощью оболочки?

    Как я могу загрузить GParted в Arch Linux?

    Как сохранить процессы, выполняемые на удаленном сервере, даже после выключения терминальной машины?

    PostgreSQL: слишком много соединений для роли «rep» на подчиненном сервере

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