shell 實現自動備份nginx下的站點html
源碼: nginx
#!/bin/bash ######################### # 功能:實現自動備份nginx下的站點 # 版本:v1.0 # 時間:2018/06/04 # 做者:百里 # 最後修改時間:2018/06/05 ######################## set +x ######################################自定義參數################################### #定義備份的目錄,無需/結尾 back_dir=/data/back/site_root #定義站點目錄,無需/結尾 vhost_dir=/usr/local/nginx/conf/vhost #定義文件名格式 back_file_name=`date +%Y%m%d` #是否開啓備份,默認不備份,只顯示,傳1則備份 is_back=$1 #定義排除站點,必須是.conf結尾的後綴 exclude_site=("admin-laravel.sgfoot.com.conf" "car.cc.conf" "sync.conf" "jap.cc.conf" "wxadmin.sgfoot.com.conf") #定義nginx配置文件含某關鍵字的不備份 exclude_keyword=("test" "asset") #定義root站點目錄含某關鍵字的不備份 exclude_root_keyword=("test" "sgfoot") #設置保存多少天 day=30 ######################################業務邏輯##################################### #定義站點數組 site_list=() #獲取全部正在運行的站點名稱 i=0 for file_name in $vhost_dir/* do name=`basename $file_name` ext="${name##*.}" #提取後綴 if [[ $ext == "conf" && ${exclude_site[@]} != *$name* ]] #排除非conf文件名 then site_list[$i]=$name let "i++" fi done #排除含某關鍵字的站點 i=0 for file_name in ${site_list[@]} do for key in ${exclude_keyword[@]} do if [[ $file_name == *$key* ]];then unset site_list[$i] fi done let "i++" done #分析提取站點目錄 site_root_list=() i=0 for file_name in ${site_list[@]} do file=$vhost_dir"/"$file_name if [ -f $file ];then root=$(cat $file |grep "root"|awk '{print $2}') root=${root%%;*} if [ -e $root ];then site_root_list[$i]=$root let "i++" fi fi done #排除root站點含某關鍵字不備份 i=0 site_root_new=() for file in ${site_root_list[@]} do flag=0 for key in ${exclude_root_keyword[@]} do if [[ "$file" == *$key* ]];then flag=1 break fi done if [ $flag -eq 0 ];then file=${file%%public*} #解決laravel項目特殊狀況 file=${file%%/} #去掉路徑後的/ site_root_new[$i]=$file let "i++" fi done #去重 len=${#site_root_new[@]} for((i=0;i<$len;i++)) do for((j=$len-1;j>i;j--)) do if [[ ${site_root_new[i]} = ${site_root_new[j]} ]];then unset site_root_new[i] fi done done #rd=$RANDOM echo "自動備份,共${#site_root_new[*]}個站點" echo "開始備份..." back_dir=${back_dir%%/}"/"`date +%Y%m%d`"/" if [ ! -e $back_dir ];then mkdir -p $back_dir fi for root in ${site_root_new[@]} do name=`basename $root` back_file=$back_dir$name"-"$back_file_name".tar.gz" echo "正在備份: $root >> $back_file" if [[ -n $is_back && $is_back == 1 ]];then tar -czPf $back_file --exclude=.svn --exclude=.git $root/ fi done #保留多少天的數據 find $back_dir -mtime +$day -name "*.tar.gz" -exec rm -rf {} \; echo "備份結束"
代碼來源於 時光博客laravel