Isso parece ser um bug no script service
. O comportamento é diferente para --status-all
do que para um único processo. Para um único processo, service
usa apenas exec
para passar para o próprio script de inicialização (nesse caso, /etc/init.d/lightdm
). Aqui está o snippet relevante:
if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
exec env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" ${ACTION} ${OPTIONS}
Para --status-all
, ele tenta analisar a saída do próprio script init.d
. Baixando o pacote sysvinit-tools
para o Ubuntu 13.10 e comparando com a minha versão (Debian Jessie), você pode ver que houve uma mudança nessa parte do código (o mais provável é que isso corrija exatamente esse tipo de erro). Compare este trecho (Ubuntu 13.10) (marquei as linhas alteradas com #<<<
:
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
e
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