Почему sssd является нераспознанной службой, хотя она установлена и может быть перезапущена? Кстати: Это касается Ubuntu 14.04.1 LTS, в 12.04 такого не было. Ниже я покажу, что я имею в виду. Я думаю, что это ошибка, но мне интересно объяснение и/или обходной путь.
root@tauriel:~/scripts# service sssd
**sssd: unrecognized service**
root@tauriel:~/scripts# service sssd status
sssd start/running, process 22454
root@tauriel:~/scripts# service sssd restart
sssd stop/waiting
sssd start/running, process 22485
root@tauriel:~/scripts# service sssd status
sssd start/running, process 22485
root@tauriel:~/scripts# service sssd
**sssd: unrecognized service**
root@tauriel:~/scripts#
Кстати: sssd — это, судя по всему, новый тег, было бы неплохо, если бы его добавили.
решение1
При запуске 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
, и т.д.), только эти скрипты смогут ответить. Если файл init для службы предназначен только для Upstart, это не сработает:
$ service tty1
tty1: unrecognized service
SSSD предлагает только сценарий инициализации Upstart, как вы можете видеть из списка файлов вsssd-common
.
Такое поведение не совсем хорошо документировано встраница руководства. Однако, если вы изучите 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
Здесь вы можете увидеть, почему возникает эта ошибка.