為什麼 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 "}")
當然,如果您不傳遞命令(restart
、status
等),則只有這些腳本能夠回應。如果服務的 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
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
在這裡您可以看到為什麼會產生該錯誤。