Lightdm 服务 - “status”命令的矛盾结果

Lightdm 服务 - “status”命令的矛盾结果

当我在 gnome 终端中运行时:

service lightdm status

一切看起来都正常并且符合预期:

lightdm start/running, process 1221

但是当我跑步时:

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

输出是:

 [ ? ]  lightdm

由于?,AFAIK 意味着 lightdm 服务没有status命令。

现在我想了解这些矛盾的结果从何而来?这是一个错误吗?

答案1

这似乎只是service脚本中的一个错误。该行为--status-all与单个进程的行为不同。对于单个进程,service只需使用exec交给 init 脚本本身(在本例中/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。下载sysvinit-toolsUbuntu 13.10 的软件包并与我的版本(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

相关内容