《使用者資料備份方案》
1. 採用bash shell
開發資料備份指令碼
2. 資料備份目錄新建在dcp/backup
下
3. 所有需要備份的檔案打包為tar
包,名字以年月日命名,如:2020-04-07.tar.gz
2020-04-07_all.tar.gz
4. 備份規則:
5. 刪除規則:
6. 定時執行:
方案設計好以後就可以進行開發了。但是在開發的過程中遇到了不少小坑。
坑一:date
命令
由於我使用 mac 進行開發的,所以在做時間處理的時候遇到了一些坑。date
在進行時間加減的時候用的引數是-d
,但是在 mac 下就報錯了。這是因為在 mac 下引數變成-v
參考資料:
為了相容 mac 和 linux 發行版,我們需要判斷當前系統是什麼
#!/bin/bash
if [[ `uname -a` =~ "darwin" ]]
then
echo "mac"
elif [[ `uname -a` =~ "centos" ]]
then
echo "centos"
elif [[ `uname -a` =~ "ubuntu" ]]
then
echo "ubuntu"
else
echo "other"
fi
~
是判斷右側正規表示式是否匹配,匹配輸出 1 不匹配輸出 0
坑二:tar
包絕對路徑
tar 打包是在相對路徑下進行的
tar cvzf 2020_04-08_all.tar.gz files/
但是我們在寫指令碼為了路徑正確,經常要用到絕對路徑,如果直接使用有時會報錯的,需要加上p
引數,記得要放在f
引數之前
tar cvzpf 2020_04-08_all.tar.gz /data/dcp/www/files/
坑三:tar
指定解壓後的目錄
如果直接用絕對路徑打包,解壓後包裡面的目錄是從根目錄開始的,如果想指定檔案的上級目錄就需要加上-c
引數來指定目錄,然後指定解壓後的目錄是files
tar cvzpf 2020_04-08_all.tar.gz -c /data/dcp/www files
坑四:find
和tar
配合使用
在打包的時候,有時候並不是所有的資料都要,這時候就需要過濾一部分資料進行打包,過濾查詢就用find
命令
find命令格式及find命令詳解
find 按檔案修改時間查詢檔案
how to find and tar files into a tar ball
這裡我們使用最常見的管道命令
find /data/dcp/www/files -mtime 0 | xargs tar cvzf 2020_04-08.tar.gz
或者使用-exec
命令
find /data/dcp/www/files -mtime 0 -exec tar cvzf 2020_04-08.tar.gz {} +
坑四:資料冗餘
上述命令看似沒有問題,但是在打包的時候回打包成多餘的冗餘資料,這是為什麼呢?
原因是目錄也有時間資訊,如果要忽略目錄只要檔案,那麼只需要加上-type f
引數就好
find /data/dcp/www/files -type f -mtime 0 | xargs tar cvzf 2020_04-08.tar.gz
坑五:find
和tar
指定解壓後的目錄
使用find
命令,打包需要管道,但是命令格式就會發生變化,為了指定目錄,我們需要變通,換一種方式
cd /data/dcp/www
find files -mtime 0 | xargs tar cvzf 2020_04-08.tar.gz
這樣就可以指定find
和tar
解壓後的目錄
最後放出使用者資料備份的原始碼:
#!/bin/bash
# today
dt=`date +"%y-%m-%d"`
# src and dest file path
src="/data/dcp/www"
dest="/data/dcp/backup"
day() -type f -name $.tar.gz | xargs rm -rf
cd $src
find files -type f -mtime 0 | xargs tar cvzf $/$.tar.gz
}week() -type f -name $_all.tar.gz | xargs rm -rf
cd $src
tar cvzf $/$_all.tar.gz files/
}# judge mac or linux
if [[ `uname -a` =~ "darwin" ]]
then
yesterday=`date -v -1d +"%y-%m-%d"`
last_week=`date -v -1w +"%y-%m-%d"`
else
yesterday=`date -d '-1 day' +%y-%m-%d`
last_week=`date -d '-1 week' +%y-%m-%d`
fi# day or week type
if [ "$1" = "day" ]
then
dayelif [ "$1" = "week" ]
then
week
else
echo "--------- *please input task type* ----------"
echo "bash $0 day [or] bash $0 week"
fi
最後,在crontab
中新增定時任務
0 0 * * * bash /data/dcp/script/dcp_user_data_backup.sh day
0 0 * * 1 bash /data/dcp/script/dcp_user_data_backup.sh week
Flask Web 開發 使用者資料
進入第10章了,看到群裡其他筒子已經完成在伺服器上的部署並上線了,好生羨慕。這一章節的內容是講使用者資料的,比如我們平時註冊乙個 以後,總有乙個頁面是讓我們修改自我介紹,城市,還能顯示註冊時間,最後一次登入等資訊 既然講到以上這些,那我們肯定要在模型裡面多加一些資訊了 如下class user us...
php爬蟲 知乎使用者資料爬取和分析
背景說明 小拽利用php的curl寫的爬蟲,實驗性的爬取了知乎5w使用者的基本資訊 同時,針對爬取的資料,進行了簡單的分析呈現。demo 位址 移動端分析資料截圖 pc端分析資料截圖 整個爬取,分析,展現過程大概分如下幾步,小拽將分別介紹 php的curl擴充套件是php支援的,允許你與各種伺服器使...
軟體設計,全心全意保護使用者資料
看了一下提示,感覺應該是軟體設定的問題,就開啟了選項看了一下,果然,問題找到了。之前 vs也出過類似的錯誤,都是軟體設定的問題。在出問題以後,如果軟體提示你不允許或者說不能執行某些操作,可以先不急著去網上找答案,先看看軟體設定,說不定就是這裡出了問題。通過這些設定可以讓自己的軟體更個人化,更符合自己...