Linux 特定のディレクトを定期的にコピー(同期バックアップ)する

方法としては、
・シェルスクリプトに同期バックアップするコードを書く。
・CRONジョブで定期的にシェルスクリプトを実行する。
という方法です。

シェルスクリプトはバッチの事、CRONはスケジューラーってことですね。
バッチ処理を定期的に実行すると言うことです。

ブログのタイトルはシンプルに書きましたが、
今回の具体的な目的は、特定ユーザーのディレクトリをロギング用に用意した別ユーザーのディレクトリにまるごと同期コピーさせるという目的です。

まずは、シェルスクリプトを書いてみましょう。

ファイル名は適当、backup.shと命名。(.shはWindows系で言うところの.batですね)
内容は、

#!/bin/bash
rsync -ru /home/user1/ /home/user2/
chown -R user2:user2 /home/user2/

簡単に説明すると
「#!/bin/bash」というのは、このスクリプトは、bashを使ったスクリプトだよと宣言しています。
/bin/bashはその所在も意味してます。まぁ宣言文ですね。
必ず必要です。
ほかにも「#!/bin/sh」などもよく使われますが、よくわからなければとりあえず同じように書いておいて問題が起きたときに考えましょう。-_-;)

rsyncコマンドは同期コピーのコマンドです。
但し、今回は「無い場合はコピー、削除はされてもバックアップ先からは削除しない。」という条件で行います。

使用しているオプションは、
-r:再帰的にディレクトリをコピーする
-u:同期先ディレクトリに新しいファイルがある場合は同期しない。

chown 所有者を変更します。
CRONをROOTで実行するため、コピーしたファイル&ディレクトリは
ROOTの所有物になっているので所有者をUSER2に変更します。

完成したシェルをちょっと試しに実行してみます。(コンソール画面からね)
. backup.sh

大丈夫そうなので、CRONにジョブ登録しますが、まるむしはいつもコマンドラインではなく、
webminから登録してるのでやり方は省略です。^^;
コマンドラインから行う場合は、「crontab」という命令をググってください。

今回は、1時間ごとに処理させたいので、
/etc/cron.hourlyに作成したシェルスクリプトのファイルを放り込みます。
これで完了。

ですが念のため動作を確認しましょう。
CRONのログは、
/ver/log/cron
なので動かない場合はログを見て分析ですね。
今回は問題なく動作しているので、ログの解析はないです。

コメント

タイトルとURLをコピーしました