Ich habe dieses Skript und verwende es, um den CRON-Job für die Ausführung dieses Skripts einzurichten, damit überprüft werden kann, ob der MySQL-Dienst ausgeführt wird. Wenn nicht, wird der MySQL-Dienst neu gestartet:
#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
sudo service mysql restart
fi
Ich habe Cron Job als eingerichtet.
sudo crontab -e
und dann hinzugefügt,
*/1 * * * * /home/ubuntu/mysql-check.sh
Das Problem ist, dass MySQL bei jeder Cron-Jobausführung neu gestartet wird. Selbst wenn der Server ausgeführt wird, wird der MySQL-Dienst neu gestartet. Dies ist eine Korrektur im Skript, um dies zu tun.
[ ... ]
odertest <TEST>
in Bash. Sie sind veraltete Syntax . Verwenden Sie[[ ... ]]
stattdessen. Verwenden Sie nur[ ... ]
und / odertest <TEST>
wenn[[ ... ]]
ist nicht verfügbar.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
Sie Folgendes : Es wird eine Subshell gestartet, inservice mysql status | grep 'mysql start/running' &> /dev/null
der ausgeführt wird. Der Rückgabestatus (Exit) der Subshell wird dann an die if-Anweisung übergeben, die dann prüft, ob sie nicht Null ist. und wenn es nicht ungleich Null ist, wird derthen
Block ausgeführt.Antworten:
Ich vermute, dass Sie den Cron-Job so eingerichtet haben, dass dieses Skript in Ihrer Crontab-Datei und nicht in der Root-Crontab-Datei ausgeführt wird. Das ist nicht richtig , denn wenn man nicht laufen
service mysql status
als root, dasmysql
wird der Service nicht erkannt werden.Ändern Sie das Skript also wie folgt:
Stellen Sie sicher, dass das ausführbar ist:
Fügen Sie dann einen neuen Eintrag in der Root-Crontab wie folgt hinzu:
Bearbeiten Sie die crontab-Stammdatei mit:
Fügen Sie der Datei die folgende Zeile hinzu:
Hinweis: Ich habe den Cron-Job für jede Minute festgelegt, aber Sie können ihn ändern, wie Sie möchten oder wie Sie es für besser halten. Siehe http://en.wikipedia.org/wiki/Cron in diesem Sinne.
quelle
./mysql-check.sh: line 2: [: =~: binary operator expected
Fehler im obigen Skript!
wenn Sie tatsächlich beabsichtigen, den MySQL-Dienst beim Absturz neu zu startenRadus Antwort hätte fast funktioniert. Ich musste den Weg festlegen, damit es funktioniert:
quelle
PATH
in der Crontab-Datei festgelegt. Wie auch immer, in Ihrem Fall müssen SiePATH=/usr/sbin:$PATH
den vollständigen Pfad verwenden,service
wenn ich meine Antwort bearbeitet habe.Radus Antwort funktioniert - aber dieses Skript funktioniert auch
quelle
pgrep mysql
und0
festgestellt, dass MySQL gestoppt wurde und2
ausgeführt wurde. Dafür habe ich die Bedingung als festgelegtif [[ $(pgrep mysql | wc -l) = 0 ]];
und es hat bei mir funktioniert./bin/bash
(es funktioniert nicht ohne Bash).*/1 * * * * /bin/bash /root/mysql-check.sh