
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, cron
absolute Pfade haben, da nur cron
ein 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 ls
um 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