Linux下Shell 備份腳本集合

Linux下Shell 備份腳本集合shell

說到Shell你們都不陌生,Shell是Linux下批處理腳本文件,相似windows下的Vbs腳本等等,能協助咱們完成一些自動化的任務,咱們前面也介紹了一些Shell腳本協助咱們完成了一些計劃任務,固然說計劃任務也不對,是經過計劃任務來調用shell腳原本完成一些自動化任務。廢話很少說了,來點實際的,今天呢,咱們主要介紹的是環境仍是工做中遇到的問題,經過遠程來完成一些還原任務,windows

 

1.首先是,咱們須要將本地備份目錄下的Weaver.proternt文件定時還原覆蓋到指定目錄下;bash

將/OAFS/Bkfiles/abc.txt文件還原到本地的/OAFS/WEAVER/ecology/abc.txt服務器

#!/bin/bash
BK_PROFEAM=/OAFS/Bkfiles/abc.txt
LOCAL_PROFEAM=OAFS/WEAVER/ecology
function copy() {
`which cp` -rf $BK_PROFEAM $LOCAL_PROFEAM
}
copy

編寫後,咱們須要chmod 770 xxxxssh

2. 咱們須要將本地/OAFS/WEAVER_BACKUP目錄下的備份壓縮文件定時解壓縮及覆蓋到遠程服務器192.168.6.38下的/OAFS目錄下,ide

若是目標存在,咱們就須要解壓覆蓋操做。函數

p_w_picpath

#!/bin/bash
LOCALBAKDIR=/OAFS/WEAVER_BACKUP
RMTRESTDIR=/OAFS
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD="$(which ssh) $RMT_USER@$RMT_HOST"

function is_alive() {
    `which ping` -c 4 $RMT_HOST >/dev/null 2>&1
    if [ "$?" -ne 0 ]; then
        echo 2
    else
        echo 0
        fi
}

function mktmpdir() {
    $RMT_CMD mkdir -p /tmp/OAFS
}

function rmvtmpdir() {
    $RMT_CMD rm -rf /tmp/OAFS/*
}

function get_last_targz() {
    echo $(ls -lt $LOCALBAKDIR | awk {'print $9'} |grep -v ^$ |head -n 1)
}

function copy() {
    yum install -y openssh-clients >/dev/null 2>&1
    $RMT_CMD yum install -y openssh-clients >/dev/null 2>&1
    scp -q $LOCALBAKDIR/$(get_last_targz) $RMT_USER@$RMT_HOST:/tmp/OAFS/
    $RMT_CMD tar zxvf /tmp/OAFS/$(get_last_targz) -C $RMTRESTDIR
}

if [ "$(is_alive)" -eq 0 ]; then
    mktmpdir
    copy
    rmvtmpdir
else
    echo "$RMT_HOST can not be accessed via port 22, please check"
fi

須要注意:由於是遠程服務器,咱們執行腳本通常是須要使用密碼進行驗證的,因爲是自動化任務,因此咱們不能輸入密碼,因此咱們須要使用ssh-key進行驗證;spa

因此咱們須要在運行腳本的服務器上執行註冊祕鑰文件:blog

ssh-keygen -t rsa      回車

clip_p_w_picpath001

建立目錄,認證目錄;而後一路回車crontab

clip_p_w_picpath002

在/root/.ssh 目錄下生成了一對密鑰文件

id_rsa   私鑰

id_rsa.pub     公鑰

clip_p_w_picpath003

ssh-copy-id ipaddress

只在腳本執行的機器上;會自動將公鑰拷貝到目標服務器上;

clip_p_w_picpath004

這樣運行腳本就能夠遠程拷貝數據了;

3.咱們將本地/OAFS/files/pdf文件下的全部內容遠程拷貝及覆蓋到目標文件夾/OAFS/pdf;

#!/bin/bash
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD="$(which ssh) $RMT_USER@$RMT_HOST"
LOCAL_PDF=/OAFS/files/pdf
RMT_PDF=/OAFS/pdf
function is_alive() {
`which ping` -c 4 $RMT_HOST >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo 2
else
echo 0
fi
}
function copy() {
scp -q -r $LOCAL_PDF/* $RMT_USER@$RMT_HOST:$RMT_PDF
}
if [ "$(is_alive)" -eq 0 ]; then
copy
else
echo "$RMT_HOST can not be accessed via port 22, please check"
fi

若是咱們須要對操做的結果進行log記錄,咱們須要添加對應的判斷便可

#!/bin/bash
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD="$(which ssh) $RMT_USER@$RMT_HOST"
LOCAL_PDF=/OAFS/files/pdf
RMT_PDF=/OAFS/pdf
function is_alive() {
    `which ping` -c 4 $RMT_HOST >/dev/null 2>&1
    if [ "$?" -ne 0 ]; then
        echo 2
    else
        echo 0
        fi
}
function copy() {
    scp -q -r $LOCAL_PDF/* $RMT_USER@$RMT_HOST:$RMT_PDF
if [ "$?" -eq 0 ]; then
    echo "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is successfull" >>/var/log/pdfcopy.log
else
    echo "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is failed" >>/var/log/pdfcopy.log
fi
}
if [ "$(is_alive)" -eq 0 ]; then
    copy
else
    echo "$RMT_HOST can not be accessed via port 22, please check"
fi


經過比對咱們知道,就是在copy的函數裏面添加了兩句

if [ "$?" -eq 0 ]; then
    echo "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is successfull" >>/var/log/pdfcopy.log
else
    echo "$(date +%Y-%m-%d_%H:%M:%S) - copy $LOCAL_PDF from localhost to $RMT_HOST:$RMT_PDF is failed" >>/var/log/pdfcopy.log
fi

執行結果,咱們能夠查看log;

cat /var/log/pdfcopy.log


wKiom1eoBHeDxTlmAAAZAXTBaHk785.png-wh_50


最後咱們能夠經過crontab -e進行定義計劃任務進行執行;

注:若是當前服務器沒有crontal命令,咱們須要安裝;

yum install crontals
crontab –e 的格式咱們上一次有介紹;因此就很少介紹了,咱們簡單的說幾個列子便可
分別爲:

天天晚上23:10分執行腳本;

每週5的23:30執行腳本和每週6的1:10執行腳本

p_w_picpath

相關文章
相關標籤/搜索