Mein Skript funktioniert nicht richtig, wenn ich mit nur sh ausführen, funktionierte es früher gut bis heute. Selbst im Cronjob wurde es problemlos ausgeführt.Skript wird nicht korrekt ausgeführt, wenn/bin/sh verwendet
/bin/sh process_check.sh
Aber es scheint in Ordnung auszuführen, wenn ich mit der folgenden Art und Weise ausführen
./process_check.sh
Script (prüft, ob ein Prozess ausgeführt wird, führt den Prozess, wenn es nicht läuft)
#/bin/sh
$service=xxx
if (($(/bin/ps -ef | grep $service | wc -l) > 1))
then
true
else
echo "$service is not running!!!"
/usr/sbin/xxx
fi
Gibt es auch Möglichkeiten, dies viel effizienter zu machen? Ich habe ein kompiliertes Programm, das ich versuche sicherzustellen, läuft immer.
Statt 'if (($ (/ bin/ps-ef | grep $ service | wc -l)> 1)); dann versuche das viel einfachere: 'if/bin/ps -ef | grep -q $ service; dann " –
@WilliamPursell Es gibt ein Problem damit. Selbst wenn '$ service' nicht läuft, kann der Prozess' grep -q $ service' in der 'ps' Ausgabe enthalten sein. Aus diesem Grund wurde im OP-Code nach "> 1" (also zwei oder mehr) gefragt. Prozesse, die mit $ service übereinstimmen. – John1024
Sie möchten es mit Bourne Shell ('sh') ausführen, aber Sie verwenden' ((....)) 'und' $ (....) ', die nicht in Bourne definiert sind. Natürlich, wenn auf Ihrem System sh mit bash verbunden ist, wird dieser Fehler nicht offensichtlich sein. – user1934428