Como enganar um script de init no retorno 0

4

Eu tenho um script de inicialização que é mal projetado porque não está de acordo com o Especificações básicas do Linux

O seguinte deve ter um código de saída de 0 se estiver em execução e 3 se não estiver em execução

service foo status; echo $? 

No entanto, devido à maneira como o script é criado, ele sempre retorna 0. Eu não posso consertar o script sem uma reescrita significativa (porque o serviço foo restart depende do status foo do serviço).

Como você poderia contornar o problema para que service foo status retorne um 0 se estiver em execução e um 3 se não estiver em execução?

O que eu tenho até agora:

root@foo:/vagrant# service foo start
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l
1
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l;echo $?
0 # <looks good so far

root@foo:/vagrant# service foo stop
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l
0
root@foo:/vagrant# /etc/init.d/foo status | /bin/grep "up and running"|wc -l;echo $?
0 # <I need this to be a 3, not a 0
    
por spuder 14.10.2013 / 07:47

1 resposta

5

Você está canalizando a grep output para wc e echo $? retornaria o código de saída para wc e não grep .

Você poderia contornar o problema facilmente usando a opção -q para grep :

/etc/init.d/foo status | /bin/grep -q "up and running"; echo $?

Se a string desejada não for encontrada, grep retornará com um código de saída diferente de zero.

EDIT: Como sugerido por mr.spuratic , você poderia dizer:

/etc/init.d/foo status | /bin/grep -q "up and running" || (exit 3); echo $?

para retornar com um código de saída de 3 se a string não for encontrada.

man grep diria:

   -q, --quiet, --silent
          Quiet;  do  not  write  anything  to  standard   output.    Exit
          immediately  with  zero status if any match is found, even if an
          error was detected.  Also see the -s  or  --no-messages  option.
          (-q is specified by POSIX.)
    
por 14.10.2013 / 07:52