web-dev-qa-db-ja.com

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は明らかに新しいタグです。追加された場合は素晴らしいでしょう。

6
jringoot

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など)を渡さないと、これらのスクリプトのみが応答できます。サービスの初期化ファイルがUpstartのみの場合、これは失敗します。

$ service tty1
tty1: unrecognized service

sssd-common のファイルのリストからわかるように、SSSDはUpstart initスクリプトのみを提供します。


この動作は 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のアクションは、execinitctl呼び出しで構成されます(シンボリックリンクバージョン-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

ここで、エラーが発生する理由を確認できます。

6
muru