
ich habe MySQL NDB Cluster installiert. Es dauert etwa 2-3 Minuten, um die Datenbank zwischen den Clusterknoten zu synchronisieren. Erst wenn die Synchronisierung abgeschlossen ist, kann ich eine andere Anwendung namens Heartbeat starten. Daher möchte ich in meinem Shell-Skript ständig die Verfügbarkeit des NDBD-Dienstes überprüfen. Sobald dieser Dienst verfügbar ist, muss ich die Heartbeat-Anwendung in fünf Minuten starten. Können Sie mir bitte helfen, das Skript zu schreiben?
Antwort1
Sie können auch versuchen, den in Bash integrierten Befehl „wait“ zu verwenden.
Von "Männer-Bash"
warten [n]
Warten Sie auf den angegebenen Prozess und geben Sie seinen Beendigungsstatus zurück. n kann eine Prozess-ID oder eine Jobspezifikation sein. Wenn eine Jobspezifikation angegeben ist, wird auf alle Prozesse in der Pipeline dieses Jobs gewartet. Wenn n nicht angegeben ist, wird auf alle derzeit aktiven untergeordneten Prozesse gewartet und der Rückgabestatus ist Null. Wenn n einen nicht vorhandenen Prozess oder Job angibt, ist der Rückgabestatus 127. Andernfalls ist der Rückgabestatus der Beendigungsstatus des letzten Prozesses oder Jobs, auf den gewartet wurde.
Ihr Skript könnte ungefähr so aussehen:
# send to background
./ndb_startup_script &
# wait on pid of ndb_startup_script
wait $!
if [ $? -eq 0 ] # assuming 0 is ret code for successful run
then
./heartbeat_startup_script
else
# extra stuff to handle error
fi
Antwort2
Ich möchte, dass das NDB-Skript ein anderes Skript ausführt, sodass es nicht 5 Minuten auf die Beendigung warten muss und den Start anderer Dienste blockiert.
## whatever starts ndb
exec heartbeat_startup_script
Ich habe hier einen Ruhezustand von 300 (Sekunden) eingegeben, weil Sie 5 Minuten angegeben haben, aber es wäre viel besser, zu prüfen, ob die NDB-Synchronisierung abgeschlossen ist.
##heartbeat_startup_script
sleep 300
heartbeat