为什么 sssd 是一个无法识别的服务,即使它已安装并且可以重新启动?

为什么 sssd 是一个无法识别的服务,即使它已安装并且可以重新启动?

为什么 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 init 脚本,它将调用该脚本(或者如果它是一个 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 "}")

当然,如果您不传递命令(restartstatus等),则只有这些脚本能够响应。如果服务的 init 文件是 Upstart-only,则此操作将失败:

$ service tty1
tty1: unrecognized service

SSSD 仅提供 Upstart 启动脚本,如您从文件列表中所见sssd-common


这种行为在手册页。但是,如果你检查该service命令,它是一个 shell 脚本:

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(通过其符号链接版本 - startstop等)。由于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

在这里您可以看到为什么会产生该错误。

相关内容