Почему sssd является непризнанной службой, даже если она установлена ​​и может быть перезапущена?

5

Почему sssd является непризнанной службой, даже если она установлена ​​и может быть перезапущена? BTW: Это касается Ubuntu 14.04.1 LTS, это было не так, как в 12.04 Я покажу, что я имею в виду ниже, я думаю, что это ошибка, но меня интересует объяснение и / или обходной путь.

[email protected]:~/scripts# service sssd
**sssd: unrecognized service**
[email protected]:~/scripts# service sssd status
sssd start/running, process 22454
[email protected]:~/scripts# service sssd restart
sssd stop/waiting
sssd start/running, process 22485
[email protected]:~/scripts# service sssd status
sssd start/running, process 22485
[email protected]:~/scripts# service sssd
**sssd: unrecognized service**
[email protected]:~/scripts# 

BTW: sssd - это, по-видимому, новый тег, было бы неплохо, если бы он был добавлен.

    
задан jringoot 04.12.2014 в 17:47
источник

1 ответ

5

Когда вы запускаете service , если есть сценарий инициализации sysv, он будет вызывать этот скрипт (или вызвать Upstart, если это задача Upstart):

$ service ssh
 * Usage: /etc/init.d/ssh {start|stop|reload|force-reload|restart|try-restart|status}
$ service gdm
/etc/init.d/gdm: 79: /etc/init.d/gdm: Syntax error: "fi" unexpected (expecting "}")

Естественно, если вы не передадите команду ( restart , status и т. д.), только эти скрипты смогут ответить. Если файл инициализации для службы является Upstart-only, это не будет выполнено:

$ service tty1
tty1: unrecognized service

SSSD предлагает только сценарий инициализации Upstart, как вы можете видеть из списка файлов в sssd-common .

Это поведение не совсем хорошо описано в manpage . Однако, если вы просмотрите команду service , которая является скриптом оболочки:

118 if [ -r "/etc/init/${SERVICE}.conf" ] && which initctl >/dev/null \
119    && initctl version | grep -q upstart
120 then
121    # Upstart configuration exists for this job and we're running on upstart
122    case "${ACTION}" in  

Действия в этом case состоят из exec вызовов initctl (через его символические версии - start , stop и т. д.). Поскольку переменная ACTION пуста и не соответствует ни одному случаю, она проходит через:

138 
139 # Otherwise, use the traditional sysvinit
140 if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
141    exec env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" ${ACTION} ${OPTIONS}
142 else
143    echo "${SERVICE}: unrecognized service" >&2
144    exit 1
145 fi

Здесь вы можете увидеть, почему он вызывает эту ошибку.

    
ответ дан muru 04.12.2014 в 18:02
источник