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 "}")

restart当然、コマンド ( 、など)を渡さない場合はstatus、これらのスクリプトのみが応答できます。サービスの init ファイルが Upstart のみの場合、これは失敗します。

$ service tty1
tty1: unrecognized service

SSSDはUpstart initスクリプトのみを提供しており、これは以下のファイルリストからわかる。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で構成されます。変数は空であり、どのケースにも一致しないため、次のようになります。execinitctlstartstopACTION

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

ここで、なぜそのエラーが発生するのかがわかります。

関連情報