So bringen Sie ein Init-Skript dazu, 0 zurückzugeben

So bringen Sie ein Init-Skript dazu, 0 zurückzugeben

Ich habe ein Init-Skript, das schlecht entworfen ist, weil es nicht denLinux Standard-Basisspezifikationen

Folgendes sollte einen Exit-Code von 0 haben, wenn es ausgeführt wird, und 3, wenn es nicht ausgeführt wird

service foo status; echo $? 

Aufgrund der Art und Weise, wie das Skript konzipiert ist, gibt es jedoch immer eine 0 zurück. Ich kann das Skript nicht reparieren, ohne es erheblich umzuschreiben (weil der Neustart des Dienstes Foo vom Status des Dienstes Foo abhängig ist).

Wie könnten Sie das Problem umgehen, sodass service foo statusbei Ausführung eine 0 und bei Nichtausführung eine 3 zurückgegeben wird?

Was ich bisher habe:

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

Antwort1

Sie leiten die grepAusgabe an weiter wcund echo $?würden den Exitcode für wcund nicht zurückgeben grep.

Sie können das Problem leicht umgehen, indem Sie die -qOption für Folgendes verwenden grep:

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

Wenn die gewünschte Zeichenfolge nicht gefunden wird, grepwird ein Exit-Code ungleich Null zurückgegeben.

EDIT: Wie vorgeschlagen vonHerr Spuratic, du könntest sagen:

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

um mit einem Exit-Code zurückzukehren, 3wenn die Zeichenfolge nicht gefunden wird.

man grepwürde sagen:

   -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.)

verwandte Informationen