Lightdmサービス - "status"コマンドの結果の競合

Lightdmサービス -

GNOME端末で実行する場合:

service lightdm status

すべてが予想通り大丈夫に見えます。

lightdm start/running, process 1221

しかし、私が実行したとき:

service --status-all 2>&1 | grep lightdm

出力は次のとおりです

 [ ? ]  lightdm

なぜなら、AFAIKはlightdmサービスに対するコマンドが?ないことを意味します。status

さて、これらの矛盾した結果がどこから来るのかを知りたいです。これはバグですか?

ベストアンサー1

serviceこれは単にスクリプトのバグのようです。この動作は--status-all単一プロセスの動作とは異なります。単一プロセスの場合は、initスクリプト自体をservice使用できます(この場合)。関連スニペットは次のとおりです。exec/etc/init.d/lightdm

if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
   exec env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" ${ACTION} ${OPTIONS}

--status-allスクリプト自体の出力を解析しようとしているからですinit.d。 Ubuntu 13.10用のパッケージをダウンロードsysvinit-toolsしてマイバージョン(Debian Jessie)と比較すると、コードのこの部分が変更されたことがわかります(おそらくこのバグを修正するため)。この(Ubuntu 13.10)スニペットを比較してみてください。 (変更された行を次のようにマークしました#<<<

if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
   cd ${SERVICEDIR}
   for SERVICE in * ; do
     case "${SERVICE}" in
       functions | halt | killall | single| linuxconf| kudzu)
           ;;
       *)
         if ! is_ignored_file "${SERVICE}" \
 && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
                 if ! grep -qs "\(^\|\W\)status)" "$SERVICE"; then     #<<<
                   #printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2
                   echo " [ ? ]  $SERVICE" 1>&2
                   continue

そして

if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
   cd ${SERVICEDIR}
   for SERVICE in * ; do
     case "${SERVICE}" in
       functions | halt | killall | single| linuxconf| kudzu)
           ;;
       *)
         if ! is_ignored_file "${SERVICE}" \
 && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
                 out=$(env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1)  #<<<
                 retval=$?                                                   #<<<
                 if echo "$out" | egrep -iq "usage:"; then                   #<<<
                   #printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2
                   echo " [ ? ]  $SERVICE" 1>&2
                   continue

おすすめ記事