systemctl show не показывает несколько свойств
Я работаю с systemctl
получить значение свойства EnvironmentFile из файла модуля ssh.service с помощью команды systemctl show ssh.service -p EnvironmentFile
но он возвращает пустой результат.
Сам файл модуля содержит это свойство. Например, мой файл модуля выглядит так (cat /lib/systemd/system/ssh.service
):
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
[Install]
WantedBy=multi-user.target
Alias=sshd.service
Более того, если я сделаю systemctl show ssh.service | grep EnvironmentFile
Я получил:
EnvironmentFile=/etc/default/ssh (ignore_errors=yes)
Например, почти все другие свойства работают как положено systemctl show ssh.service -p After
возвращает расширенные зависимости:
After=network.target auditd.service systemd-journald.socket basic.target sysinit.target system.slice
Та же проблема со свойством ConditionPathExists, но в этом случае даже grep не показывает это свойство (systemctl show ssh.service | grep ConditionPathExists
ничего не печатает).
Почему это происходит? А как получить свойство EnvironmentFile из файла модуля без использования grep
?
2 ответа
Я воспроизвел проблему с отсутствующим EnvironmentFile
в SystemD 229 и перекрестные ссылки на документацию для systemctl
так же хорошо как NEWS
файл из последней версии systemd
чтобы увидеть, есть ли упоминания об этом поведении, которое будет изменено. Нет.
Это похоже на ошибку в systemd
, Документация для systemctl
подразумевает, что это будет работать при просмотре документации для show
а также --property
, Как вы заметили, свойство определенно есть, если вы к нему относитесь.
Я рекомендую вам просмотреть существующие открытые проблемы для systemd, чтобы увидеть, есть ли уже открытая проблема для этого. Если нет, откройте новый отчет о проблеме.
Если поведение работает так, как задумано, то man systemctl
Документы должны быть обновлены, чтобы уточнить это.
По предложению Марка Стосберга я попытался найти открытую проблему, связанную с этой проблемой, и нашел одну, которая описывает неправильное поведение автозаполнения в отношении свойств Environment*.
Используя busctl, я обнаружил, что фактическое имя свойства - EnvironmentFiles (busctl introspect org.freedesktop.systemd1 /org/freedesktop/systemd1/unit/ssh_2eservice | grep EnvironmentFile
):
.EnvironmentFiles property a(sb) 1 "/etc/default/ssh" true const
Поэтому, если вам нужно получить это свойство из systemctl, вы должны выполнить systemctl show -p EnvironmentFiles ssh.service
(вывод ниже):
EnvironmentFile=/etc/default/ssh (ignore_errors=yes)