Mam ten skrypt, używam go do konfiguracji zadania CRON w celu wykonania tego skryptu, aby mógł sprawdzić, czy usługa MySQL jest uruchomiona; jeśli nie, to ponownie uruchom usługę MySQL:
#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
sudo service mysql restart
fi
Mam ustawione zadanie crona jako.
sudo crontab -e
a następnie dodał
*/1 * * * * /home/ubuntu/mysql-check.sh
Problem polega na tym, że restartuje MySQL przy każdym wykonaniu zadania cron. Nawet jeśli serwer jest uruchomiony, zrestartuj usługę MySQL, co jest poprawione w skrypcie, aby to zrobić.
[ ... ]
lubtest <TEST>
w Bash. Są przestarzałą składnią . Użyj[[ ... ]]
zamiast tego. Używaj[ ... ]
i / lubtest <TEST>
gdy nie[[ ... ]]
jest dostępny.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
uruchamia podpowłokę, w którejservice mysql status | grep 'mysql start/running' &> /dev/null
uruchamia się, status powrotu (wyjścia) wspomnianej podpowłoki jest następnie przekazywany do instrukcji if, która następnie sprawdza, czy jest niezerowa, a jeśli to nie niezerowe wtedy uruchamiathen
blok.Odpowiedzi:
Podejrzewam, że konfigurujesz zadanie crona do wykonywania tego skryptu w pliku crontab, a nie w głównym pliku crontab. To nie jest poprawne, ponieważ jeśli nie uruchomisz się
service mysql status
jako root,mysql
usługa nie zostanie rozpoznana.Zmodyfikuj skrypt w następujący sposób:
Upewnij się, że jest wykonywalny:
Następnie dodaj nowy wpis do tabeli głównej w następujący sposób:
Edytuj główny plik crontab, używając:
I dodaj następujący wiersz do pliku:
Uwaga: Ustawiłem pracę crona na każdą minutę, ale możesz zmienić to, co chcesz lub według własnego uznania. Zobacz http://en.wikipedia.org/wiki/Cron w tym sensie.
źródło
./mysql-check.sh: line 2: [: =~: binary operator expected
błąd w powyższym skrypcie!
jeśli faktycznie zamierzasz zrestartować usługę mysql w przypadku awariiOdpowiedź Radu prawie działała. Musiałem ustawić ścieżkę, aby działała:
źródło
PATH
w pliku crontab. W każdym razie, w twoim przypadku musisz użyćPATH=/usr/sbin:$PATH
lub skorzystać z pełnej ścieżki,service
gdy edytowałem moją odpowiedź.Odpowiedź Radu działa - ale ten skrypt również działa
źródło
pgrep mysql
i dostałem0
zatrzymanie mysql i2
uruchomienie. Dlatego ustawiłem warunek jakoif [[ $(pgrep mysql | wc -l) = 0 ]];
i zadziałało dla mnie./bin/bash
(nie działa bez bash).*/1 * * * * /bin/bash /root/mysql-check.sh