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は明らかに新しいタグです。追加された場合は素晴らしいでしょう。
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
など)を渡さないと、これらのスクリプトのみが応答できます。サービスの初期化ファイルが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
のアクションは、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
ここで、エラーが発生する理由を確認できます。