Lightdm 서비스 - "status" 명령에 대한 결과 충돌

Lightdm 서비스 - "status" 명령에 대한 결과 충돌

그놈 터미널에서 실행할 때:

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

관련 정보