So lesen Sie den Dienststatus in einem Bash-Skript

So lesen Sie den Dienststatus in einem Bash-Skript

Ich habe ein Skript geschrieben, um einen bestimmten Dienst auf meinem VPS zu überwachen. Dieser Dienst (clamd.amavisd) wird häufig unerwarteterweise als tot erkannt und wenn das passiert, wird mein E-Mail-Dienst im Wesentlichen gestoppt.

Ich verwende im Skript folgende Anweisung:

STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)

Das Problem besteht darin, dass das Skript beim Ausführen über das Terminal etwas in dieser Variable empfängt (ich habe es in eine Datei übertragen, damit ich es weiß). Wenn es jedoch in einem Cron-Job ausgeführt wird, ist die Variable leider leer.

Es ist offensichtlich, dass ich etwas falsch mache. Gibt es einen Faktor, den ich nicht berücksichtige?

Antwort1

ABSOLUT muss alles, was Sie ausführen, cronabsolute Pfade haben, da nur cronein minimaler Teil der Umgebungsvariablen verwendet wird

   STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)

Sie können in Ihrem Skript die wichtigsten Pfade festlegen, die Sie benötigen.

   PATH=/bin:/usr/local/sbin 

aber wenn Sie eines Tages herausfinden möchten, dass es sich beispielsweise lsum einen bösartigen Hacker-Drop handelt, verwenden Sie immer absolute Pfade

Geben Sie am Anfang Ihres Skripts an, dass Sie bereit sind, so etwas zu verwenden

   CAT='/bin/cat'
   LS='/bin/ls'

und verwenden Sie es als

  $LS -la /some/path
  $CAT /etc/passwd

verwandte Informationen