1

pleskがインストールされたサーバー(centOS)があり、毎日いくつかのバックアップを計画する必要があります。Pleskでは計画されたバックアップが1つしか許可されていないため、次のソリューションを作成しました。

  1. 毎晩フォルダ内にバックアップを作成します
  2. フォルダ内のtxtファイルのタイトルからその日を読み取るスクリプトを起動します(cronTABを介して毎晩起動されます)
  3. バックアップファイルを正しいディレクトリ内に移動します(日の名前に基づく)
  4. txtのタイトルでその日の名前を変更します

これは私のスクリプトです(現在テストされていません):

BACKUPNAME="backupname"
cd /backup/daily
find . -type f | while IFS= read filename; do
  case "${filename,,*}" in 
    mon.txt) mv $BACKUPNAME ../mon
    mv mon.txt tue.txt;;
    tue.txt) mv $BACKUPNAME ../tue
    mv tue.txt wed.txt;;
    wed.txt) mv $BACKUPNAME ../wed
    mv wed.txt thu.txt;;
    thu.txt) mv $BACKUPNAME ../thu
    mv thu.txt fri.txt;;
    fri.txt) mv $BACKUPNAME ../fri
    mv fri.txt sat.txt;;
    sat.txt) mv $BACKUPNAME ../sat
    mv sat.txt sun.txt;;
    sun.txt) mv $BACKUPNAME ../sun
    mv sun.txt mon.txt;;
    * : ;; #nothing
  esac
done

あなたはそれが良い/安定した解決策だと思いますか?

ありがとう!

4

2 に答える 2

0

「計画されたバックアップが1つだけ」とはどういう意味かわかりませんが、これについて説明していただけますか。

一方、rsyncを実行し、必要に応じて最も古いものを削除してみませんか…これが私がこれを行う方法です。

#!/bin/bash
date=`/bin/date "+%Y-%m-%dT%H_%M_%S"`
HOME=/root

/bin/echo -e "\n\n# Backup from $date\n" >> /var/log/backup.log

/usr/bin/rsync -axzP \
  --delete \
  --delete-excluded \
  --exclude-from=$HOME/.rsync/exclude \
  --link-dest=/COREBACKUP/CurrentBackup \
  / /COREBACKUP/Backups/incomplete_back-$date >> /var/log/backup.log 2>&1 \
&& mv /COREBACKUP/Backups/incomplete_back-$date /COREBACKUP/Backups/back-$date \
&& rm -f /COREBACKUP/CurrentBackup \
&& ln -s /COREBACKUP/Backups/back-$date /COREBACKUP/CurrentBackup \
&& echo `/bin/date "+%Y-%m-%d - %H:%M:%S"` > /var/log/lastbackup.log 2>&1

このスクリプトはcronを介して毎日呼び出され、$ HOME / .rsync/excludeにリストされているすべてのものを除いて「/」の完全バックアップを作成します。

バックアップは/COREBACKUP/ Backups / back- $ dateに保存され、最新のバックアップは/ COREBACKUP/CurrentBackupに保存されます。

それはもっとユーザーフレンドリーに書かれているかもしれませんが、それはうまくいきます;-)

于 2012-10-04T13:41:49.410 に答える
0

日によってバックアップ先をローテーションすることは合理的ですが、質問に示されている名前生成方法は、1 日に 1 回実行されるシステムに依存します。システムが 1 日シャットダウンされた場合、またはスクリプトが 1 日に 2 回実行された場合、,, mon.txt...tue.txtシーケンスは同期しなくなります。ファイル名と不格好な case ステートメントを使用して宛先ディレクトリの名前を取得する代わりに、次のようなコードを使用します。

day=$(date +%a)
mv $BACKUPNAME ../${day,,}

バックアップ ファイルが現在とは異なる日付に属している場合dateは、次のいずれかの形式を使用して、それぞれday昨日の名前またはファイルが最後に変更された日の名前に設定します。

day=$(date +%a --date=yesterday)
day=$(date +%a -r $BACKUPNAME)
于 2012-10-04T14:33:45.510 に答える