Saya memiliki skrip ini, saya menggunakannya untuk mengatur pekerjaan CRON untuk menjalankan skrip ini, sehingga dapat memeriksa apakah layanan MySQL berjalan; jika tidak maka restart layanan MySQL:
#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
sudo service mysql restart
fi
Saya memiliki pekerjaan setup cron sebagai.
sudo crontab -e
dan kemudian menambahkan,
*/1 * * * * /home/ubuntu/mysql-check.sh
Masalahnya adalah itu me-restart MySQL pada setiap eksekusi cron .. bahkan jika server menjalankannya me-restart layanan MySQL apa koreksi dalam skrip untuk melakukan itu.
[ ... ]
atautest <TEST>
di Bash. Itu sintaks yang sudah usang . Gunakan[[ ... ]]
sebagai gantinya. Hanya menggunakan[ ... ]
dan / atautest <TEST>
saat[[ ... ]]
ini tidak tersedia.if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
Apa yang dilakukannya, apakah memulai sebuah subkulit, di manaservice mysql status | grep 'mysql start/running' &> /dev/null
dijalankan, status kembalinya (keluar) dari subkulit tersebut kemudian diteruskan ke pernyataan-if, yang kemudian memeriksa untuk melihat apakah itu bukan nol, dan jika bukan nol maka ia menjalankanthen
blok.Jawaban:
Saya menduga bahwa Anda mengatur tugas cron untuk menjalankan skrip ini di file crontab Anda, dan bukan di file root crontab. Ini tidak benar karena jika Anda tidak menjalankan
service mysql status
sebagai root,mysql
layanan tidak akan dikenali.Jadi, modifikasi skrip sebagai berikut:
Pastikan itu dapat dieksekusi:
Kemudian tambahkan entri baru di root crontab sebagai berikut:
Edit file root crontab menggunakan:
Dan tambahkan baris berikut ke file:
Catatan: Saya telah mengatur tugas cron untuk setiap menit, tetapi Anda dapat berubah sesuai keinginan atau menurut Anda lebih baik. Lihat http://en.wikipedia.org/wiki/Cron dalam pengertian ini.
sumber
./mysql-check.sh: line 2: [: =~: binary operator expected
kesalahan dalam skrip di atas!
jika Anda benar-benar berniat untuk memulai kembali layanan mysql pada saat crashJawaban Radu hampir berhasil. Saya harus mengatur jalur untuk membuatnya bekerja:
sumber
PATH
file crontab saya. Bagaimanapun, dalam kasus Anda, Anda perlu menggunakanPATH=/usr/sbin:$PATH
atau menggunakan path lengkap untukservice
saat saya mengedit jawaban saya.Jawaban Radu berhasil - tetapi skrip ini juga berfungsi
sumber
pgrep mysql
dan mendapatkan0
mysql dihentikan dan2
berjalan. Karenanya saya mengatur kondisiif [[ $(pgrep mysql | wc -l) = 0 ]];
dan berfungsi untuk saya./bin/bash
(tidak berfungsi tanpa bash).*/1 * * * * /bin/bash /root/mysql-check.sh