it-swarm.com.de

Shell-Skript-Problem: Cron-Job-Skript zum Neustarten des MySQL-Servers, wenn dieser versehentlich gestoppt wird

Ich habe dieses Skript. Ich 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 als Cron Job eingerichtet.

Sudo crontab -e

und dann hinzugefügt,

*/1 * * * * /home/ubuntu/mysql-check.sh

Das Problem ist, dass MySQL bei jeder Cron-Job-Ausführung neu gestartet wird. Auch wenn der Server läuft, wird der MySQL-Dienst neu gestartet, was im Skript korrigiert wird, um dies zu tun.

11
Straw Hat

Ich vermute, dass Sie den Cron-Job zum Ausführen dieses Skripts in Ihrer Crontab-Datei und nicht in der Stamm-Crontab-Datei eingerichtet haben. Dies ist nicht korrekt, da der Dienst mysql nicht erkannt wird, wenn Sie service mysql status nicht als Root ausführen .

Ändern Sie das Skript also wie folgt:

#!/bin/bash
if [[ ! "$(/usr/sbin/service mysql status)" =~ "start/running" ]]
then
    /usr/sbin/service mysql start
fi

Stellen Sie sicher, dass es ausführbar ist:

chmod +x /path/to/script

Fügen Sie dann einen neuen Eintrag in der Root-Crontab wie folgt hinzu:

  • Bearbeiten Sie die root-crontab-Datei mit:

    Sudo crontab -e
    
  • Fügen Sie der Datei die folgende Zeile hinzu:

    */1 * * * * /path/to/script
    
  • Hinweis: Ich habe den Cron-Job für jede Minute festgelegt, aber Sie können ihn ändern, wie Sie es wünschen oder als besser erachten. Siehe http://en.wikipedia.org/wiki/Cron in diesem Sinne.

16
Radu Rădeanu

Radus Antwort hätte fast funktioniert. Ich musste den Pfad festlegen, damit es funktioniert:

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [[ ! "$(service mysql status)" =~ "start/running" ]]
then
    service mysql start
fi
3
Donkzilla

Radus Antwort funktioniert - aber dieses Skript funktioniert auch

#!/bin/bash
if [[ $(pgrep mysql | wc -l) = 0 ]];
then
    Sudo service mysql start;
fi
2
JxAxMxIxN