1. 程式人生 > >Shell練習(四)

Shell練習(四)

init word 服務 class etc gin border ott .sql

習題1:備份數據庫

要求:設計一個shell腳本來備份數據庫,首先在本地服務器上保存一份數據,然後再遠程拷貝一份,本地保存一周的數據,遠程保存一個月

假定,我們知道mysql root賬號的密碼,要備份的庫為discuz,本地備份目錄為/bak/mysql, 遠程服務器ip為192.168.139.128,遠程提供了一個rsync服務,備份的地址是 192.168.139.128::backup .

寫完腳本後,需要加入到cron中,每天淩晨3點執行。

參考答案:

#!/bin/bash
# date:2018年2月8日
PATH=$PATH:/usr/local/mysql/bin/
d=`date +"%Y%m%d"`
passwd="your_mysql_password"
lo_bak_dir="/bak/mysql"
re_bak_dir="192.168.139.128::backup"
exec 1>/var/log/mysqlbak.log 2>/var/log/mysqlbak.log
echo "MySQL backup begin at `date +"%F %T"`."
mysqldump -uroot -p$passwd discuz > $lo_bak_dir/$d.sql
rsync -az $lo_bak_dir/$d.sql $re_bak_dir/$d.sql
echo "MySQL backup end at `date +"%F %T"`."

cron任務計劃:0 3 * * * /bin/bash /usr/local/sbin/mysqlbak.sh

本地保存一周的數據,遠程保存一個月:

使用find命令實現:find /lo_bak_dir/ -type f -name "*.sql" -exec rm -f {} \;


習題2:自動重啟php-fpm服務

要求:服務器上跑的是LNMP環境,近期總是有502現象。502為網站訪問的狀態碼,200正常,502錯誤是nginx最為普通的錯誤狀態碼。由於502只是暫時的,並且只要一重啟php-fpm服務則502消失,但不重啟的話,則會一直持續很長時間。所以有必要寫一個監控腳本,監控訪問日誌的狀態碼,一旦發生502,則自動重啟一下php-fpm。

我們設定:
1. access_log /data/log/access.log
2. 腳本死循環,每10s檢測一次(假設每10s鐘的日誌條數為300左右)
3. 重啟php-fpm的方法是 /etc/init.d/php-fpm restart

參考答案:



Shell練習(四)