статус сервиса sudo включает в себя плохо;

32
$ sudo service cassandra status
● cassandra.service - LSB: distributed storage system for structured data
   Loaded: loaded (/etc/init.d/cassandra; bad; vendor preset: enabled)
   Active: active (running) since Wed 2016-10-12 15:54:40 IDT; 4min 4s ago

Что означает bad;часть на 2-й строке выхода? Я получаю это для многих сервисов, например, mysql, winbind, virtualbox, некоторые из которых я уже использовал безупречно (cassandra была новой установкой).

матовый
источник

Ответы:

42

Краткий ответ:

  • bad: Показывает Systemd Unit filesстатус включения
  • вы увидите такого рода сообщения в системах, которые используют systemd
  • Вы можете проверить статус включения, используя команду:

    sudo systemctl is-enabled <unit-name>
    

    если блок файл является уроженцем сервиса Systemd то это даст выход enabled, disabledи т.д. Если это не родной Systemd службы , то он даст отчет сообщений как.

    sudo systemctl is-enabled apache2
    apache2.service is not a native service, redirecting to systemd-sysv-install
    Executing /lib/systemd/systemd-sysv-install is-enabled apache2
    enabled
    

    но с командой:

    systemctl status apache2
    or
    service apache2 status
    

    это дает статус bad. (возможно, это потому, что не удалось напечатать полное сообщение или разработчик решил напечатать bad)

Длинный ответ:

что такое файлы системного блока?

Единицы - это объекты, которыми systemd знает, как управлять. Это в основном стандартизированное представление системных ресурсов, которыми можно управлять с помощью набора демонов и манипулировать предоставляемыми утилитами. Его можно использовать для абстрагирования сервисов, сетевых ресурсов, устройств, монтирования файловой системы и изолированных пулов ресурсов. Вы можете подробно прочитать о системных модулях здесь и здесь

пример:

systemctl status apache2
* apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           `-apache2-systemd.conf
   Active: active (running) since Wed 2016-10-12 14:29:42 UTC; 17s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1027 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)

systemctl проверит, apache2является ли это нативный модуль или нет. Если нет, то он попросит systemd-sysv-generatorсгенерировать файл в формате единиц, который обеспечивает поддержку, аналогичную собственным единицам. В приведенном выше примере сгенерированный файл хранится в /lib/systemd/system/apache2.service.d/apache2-systemd.conf

Drop-In: /lib/systemd/system/apache2.service.d
               `-apache2-systemd.conf

Примечание: вы можете найти генератор на /lib/systemd/system-generators/systemd-sysv-generatorи вы можете прочитать больше об этом

man systemd-sysv-generator

Основной момент :

is-enabled NAME...
       Checks whether any of the specified unit files are enabled (as with
       enable). Returns an exit code of 0 if at least one is enabled,
       non-zero otherwise. Prints the current enable status (see table).
       To suppress this output, use --quiet.

       Table 1.  is-enabled output
       +------------------+-------------------------+-----------+
       |Name              | Description             | Exit Code |
       +------------------+-------------------------+-----------+
       |"enabled"         | Enabled via             |           |
       +------------------+ .wants/, .requires/     |           |
       |"enabled-runtime" | or alias symlinks       |           |
       |                  | (permanently in         | 0         |
       |                  | /etc/systemd/system/,   |           |
       |                  | or transiently in       |           |
       |                  | /run/systemd/system/).  |           |
       +------------------+-------------------------+-----------+
       |"linked"          | Made available through  |           |
       +------------------+ one or more symlinks    |           |
       |"linked-runtime"  | to the unit file        |           |
       |                  | (permanently in         |           |
       |                  | /etc/systemd/system/    |           |
       |                  | or transiently in       | > 0       |
       |                  | /run/systemd/system/),  |           |
       |                  | even though the unit    |           |
       |                  | file might reside       |           |
       |                  | outside of the unit     |           |
       |                  | file search path.       |           |
       +------------------+-------------------------+-----------+
       |"masked"          | Completely disabled,    |           |
       +------------------+ so that any start       |           |
       |"masked-runtime"  | operation on it fails   |           |
       |                  | (permanently in         | > 0       |
       |                  | /etc/systemd/system/    |           |
       |                  | or transiently in       |           |
       |                  | /run/systemd/systemd/). |           |
       +------------------+-------------------------+-----------+
       |"static"          | The unit file is not    | 0         |
       |                  | enabled, and has no     |           |
       |                  | provisions for enabling |           |
       |                  | in the "[Install]"      |           |
       |                  | section.                |           |
       +------------------+-------------------------+-----------+
       |"indirect"        | The unit file itself is | 0         |
       |                  | not enabled, but it has |           |
       |                  | a non-empty Also=       |           |
       |                  | setting in the          |           |
       |                  | "[Install]" section,    |           |
       |                  | listing other unit      |           |
       |                  | files that might be     |           |
       |                  | enabled.                |           |
       +------------------+-------------------------+-----------+
       |"disabled"        | Unit file is not        | > 0       |
       |                  | enabled, but contains   |           |
       |                  | an "[Install]" section  |           |
       |                  | with installation       |           |
       |                  | instructions.           |           |
       +------------------+-------------------------+-----------+
       |"bad"             | Unit file is invalid or | > 0       |
       |                  | another error occurred. |           |
       |                  | Note that is-enabled    |           |
       |                  | will not actually       |           |
       |                  | return this state, but  |           |
       |                  | print an error message  |           |
       |                  | instead. However the    |           |
       |                  | unit file listing       |           |
       |                  | printed by              |           |
       |                  | list-unit-files might   |           |
       |                  | show it.                |           |
       +------------------+-------------------------+-----------+

если мы запустим команду:

sudo systemctl is-enabled ssh
enabled

sudo systemctl is-enabled docker
enabled

sudo systemctl is-enabled apache2
apache2.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install is-enabled apache2
enabled

вы можете видеть, являются ли модули нативными для systemd, sshи dockerв приведенном выше выводе он будет отображаться только enabled, а для модулей, которые не являются нативными, apache2но все еще включены, он выдает сообщения с этим, а не печатает badздесь из-за этого условия:

       +------------------+-------------------------+-----------+
       |"bad"             | Unit file is invalid or | > 0       |
       |                  | another error occurred. |           |
       |                  | Note that is-enabled    |           |
       |                  | will not actually       |           |
       |                  | return this state, but  |           |
       |                  | print an error message  |           |
       |                  | instead. However the    |           |
       |                  | unit file listing       |           |
       |                  | printed by              |           |
       |                  | list-unit-files might   |           |
       |                  | show it.                |           |
       +------------------+-------------------------+-----------+

Решение:

Статус badне создаст проблемы (я не уверен, что это зависит), но он не обеспечит всю функциональность systemctl. Вы можете ждать следующего выпуска того, packageчто будет изначально поддерживаться systemd. или вы можете написать файл модуля для вашей службы или любого другого ресурса, используя данные ссылки.

Вы можете подробно прочитать о systemd, systemctl и единицах, используя следующие ссылки:

  1. Systemctl

  2. Системные блоки и Здесь

  3. Systemd

pl_rock
источник
Действительно спасибо за полное и внимательное обсуждение темы!
матовый
2
Этот ответ кажется действительно полным, но он немного сбивает с толку ... вы, кажется, предоставляете много информации, фактически не констатируя краткий вывод, который можно (возможно) извлечь из информации. Например, прямой, краткий вывод, который я заключаю (с некоторой работой) из вашего краткого ответа, состоит в том, что, когда служба (системный модуль) не является нативной, systemctl не может получить свой статус включения без перенаправления на systemd-sysv-install. Команда systemctl status по какой-то причине не делает этого, но вместо этого сообщает о «плохом», тогда как systemctl is-enabled выполнит перенаправление, чтобы дать вам статус.
EricS
1
Я думаю, что кое-что, что смутило меня, было некоторыми формулировками, особенно в начальных пунктах пули. Я представил некоторые изменения, чтобы попытаться улучшить.
EricS