Shell練習(四)
阿新 • • 發佈:2018-02-08
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練習(四)