話說,最近遇到一台機器 mysql 服務時常會忘記自己還在
搞了很久實在都搞不定,因此我決定發揮頭痛醫頭的精神。直接寫一個shell Script來偵測看他是不是活著。
Liunx Shell Script 範例:
#!/bin/bash
T=$(date +%H:%M:%S)
D=$(date +%m%d%Y)
mysqladmin -u test flush-hosts $1 >> /dev/null || {
/etc/init.d/mysqld restart $1 >> /dev/null || {
echo "$T" > /s_"$D".error
}
echo "$T" error > /"$D".error
}
說明:
先設定兩個變數 T 和 D分別用來記載時間和檔名,因為我們要讓每天的錯誤檔案分開記這樣比較清楚。
>>表示把處理後的值丟到下面的地方 /dev/null 表示不處理,因此剛剛那一段的意思表示:如果mysql 釋放成功那就不管他
|| 要不然(或)
/etc/init.d/mysqld restart $1 >> /dev/null 把mysqld 重新啟動
這個地方要注意一件事情:
在指令模式中,/etc/init.d/mysqld restart 也可以寫成 service mysqld restart。不過在shell script中這樣的寫法是不被允許的,在這裡面的執行路徑都必須是絕對路徑。除非你不想給cron進行排程。
echo "$T" > /s_"$D".error 這表示如果連重新啟動都失敗,就寫入log到 /s_當天日期.error的檔案
存檔後要記得把檔案設成可以被執行 chmod +x 檔案路徑
然後丟到cron中就可以啦
你可能還會需要看:
crond linux 系統排程
搞了很久實在都搞不定,因此我決定發揮頭痛醫頭的精神。直接寫一個shell Script來偵測看他是不是活著。
Liunx Shell Script 範例:
#!/bin/bash
T=$(date +%H:%M:%S)
D=$(date +%m%d%Y)
mysqladmin -u test flush-hosts $1 >> /dev/null || {
/etc/init.d/mysqld restart $1 >> /dev/null || {
echo "$T" > /s_"$D".error
}
echo "$T" error > /"$D".error
}
說明:
先設定兩個變數 T 和 D分別用來記載時間和檔名,因為我們要讓每天的錯誤檔案分開記這樣比較清楚。
mysqladmin -u test flush-host $1 >> /dev/null
這行的動作是說如果mysqladmin -u test flush-host執行成功( $1 表示執行成功),就不處理>>表示把處理後的值丟到下面的地方 /dev/null 表示不處理,因此剛剛那一段的意思表示:如果mysql 釋放成功那就不管他
|| 要不然(或)
/etc/init.d/mysqld restart $1 >> /dev/null 把mysqld 重新啟動
這個地方要注意一件事情:
在指令模式中,/etc/init.d/mysqld restart 也可以寫成 service mysqld restart。不過在shell script中這樣的寫法是不被允許的,在這裡面的執行路徑都必須是絕對路徑。除非你不想給cron進行排程。
echo "$T" > /s_"$D".error 這表示如果連重新啟動都失敗,就寫入log到 /s_當天日期.error的檔案
存檔後要記得把檔案設成可以被執行 chmod +x 檔案路徑
然後丟到cron中就可以啦
你可能還會需要看:
crond linux 系統排程
留言