Centos7 での Rsync+crontab 定期同期バックアップ

Centos7 での Rsync+crontab 定期同期バックアップ

最近、社内の重要なサーバデータを定期的にストレージにバックアップし、ついでにメモしておきたい

以前、Windows で cwrsync (クライアント) + rsync (サーバー: ストレージ) 用の bat スクリプトを開発しました。

今回は、Linux スクリプト sh を使用して定期的な自動データ バックアップを実行します。

クライアント: 192.168.0.100 (rsync-Linux)

サーバー: 192.168.0.252 (ストレージ)

rsync の紹介:

Rsync は、Linux システムのデータミラーリング バックアップ ツールです。高速増分バックアップ ツール Remote Sync を使用して、リモートで同期したり、ローカル レプリケーションをサポートしたり、他の SSH および rsync ホストと同期したりします。

1. サーバー構成:

rsync サーバーは主に Qunhui のストレージであるため、直接インターフェース構成があり、以下に示すようにここでは詳しく説明しません。

2. クライアント構成:

パスワードファイル/etc/rsyncd/rsyncd.passを作成し、権限を600に変更します。

[root@localhost ~]# mkdir rsyncd
[root@localhost ~]# vim /rsyncd/rsyncd.pass
[root@localhost ~]# chmod 600 /rsyncd/rsyncd.pass

▲注意: /rsyncd/rsyncd.pass のパスワードは、サーバーの /etc/rsyncd/rsyncd.pass のパスワードまたは rsync 指定ユーザーのパスワードと一致している必要があります。

クライアントはファイルをサーバーに転送します。ポートが873の場合は、--portを削除できます。


rsync -arvz --progress /data [email protected]::log --password-file=/rsyncd/rsyncd.pass

必要に応じて、サーバーからファイルをプルすることもできます。サーバーの/etc/rsyncd/rsyncd.confでwrite only = yesを削除する必要があります。

#ディレクトリ全体をプルします rsync -arvz --progress --password-file=/rsyncd/rsyncd.pass --port=873 [email protected]::log /var/log
# 1 つのファイルをプルします rsync -arvz --progress --password-file=/rsyncd/rsyncd.pass --port=873 [email protected]::log/a.log /var/log

Rsync サーバーの構成パラメータ:

ファイル内の [module] より前のすべてのパラメータはグローバルパラメータです。もちろん、グローバルパラメータ部分でモジュールパラメータを定義することもできます。この場合、パラメータの値はすべてのモジュールのデフォルト値になります。
ポート
バックグラウンド プログラムが使用するポート番号を指定します。デフォルトは 873 です。
motd ファイル
「motd ファイル」パラメータは、メッセージ ファイルを指定するために使用されます。このファイルの内容は、クライアントがサーバーに接続したときに表示されます。デフォルトでは、motd ファイルはありません。
ログファイル
「ログ ファイル」は、ログを syslog に送信する代わりに、rsync のログ ファイルを指定します。たとえば、「/var/log/rsyncd.log」のように指定できます。
pidファイル
rsync pid ファイルを指定します。通常は「/var/run/rsyncd.pid」として指定されます。
syslog 機能
rsync が syslog にログ メッセージを送信するメッセージ レベルを指定します。一般的なメッセージ レベルは、uth、authpriv、cron、daemon、ftp、kern、lpr、mail、news、security、sys-log、user、uucp、local0、local1、local2、local3、local4、local5、local6、local7 です。デフォルト値はデーモンです。
モジュール パラメータは主に、同期するサーバーのディレクトリを定義します。形式は "[module]" にする必要があります。この名前は rsync クライアントに表示される名前で、実際には Samba サーバーによって提供される共有名に少し似ています。サーバーが実際に同期するデータはパスによって指定されます。必要に応じて複数のモジュールを指定できます。モジュールでは次のパラメータを定義できます。
コメント
モジュールに説明を割り当てます。この説明は、クライアントが接続してモジュールのリストを取得するときに、モジュール名とともに表示されます。デフォルトでは説明は定義されていません。
パス
このモジュールのバックアップ用のディレクトリ ツリー パスを指定します。このパラメータは必須です。
chrootを使用する
「use chroot」が true に指定されている場合、rsync はファイルを転送する前に、まずパス パラメータで指定されたディレクトリに chroot します。これを行う理由は、追加のセキュリティ保護を実現するためですが、欠点は、ルート権限が必要であり、外部シンボリック リンクによってポイントされるディレクトリ ファイルをバックアップできないことです。デフォルトでは、chroot 値は true です。
ユーザID
このオプションは、モジュールがファイルを転送するときにデーモンが持つべき uid を指定します。gid オプションと一緒に使用すると、アクセスできるファイル権限を決定できます。デフォルト値は「nobody」です。
ギド
このオプションは、このモジュールがファイルを転送するときにデーモンが持つべき gid を指定します。デフォルト値は「nobody」です。
最大接続数
サーバーを保護するために、このモジュールの最大同時接続数を指定します。制限を超える接続要求は通知され、後で再試行されます。デフォルト値は 0 で、制限がないことを意味します。
リスト
このオプションは、クライアントが利用可能なモジュールのリストを要求したときに、このモジュールをリストするかどうかを指定します。このオプションを false に設定すると、非表示のモジュールを作成できます。デフォルト値は true です。
読み取り専用
このオプションは、クライアントがファイルをアップロードできるかどうかを決定します。 true の場合、すべてのアップロード要求は失敗します。false の場合、サーバー ディレクトリの読み取りおよび書き込み権限が許可されていれば、アップロードは許可されます。デフォルト値は true です。
除外する
複数のファイルまたはディレクトリ (相対パス) をスペースで区切って指定し、除外リストに追加するために使用されます。これは、クライアント コマンドでパターンを指定するために --exclude を使用するのと同じです。モジュールに対して指定できる exclude オプションは 1 つだけです。ただし、このオプションにはセキュリティ上の問題があることに注意してください。顧客は除外リストを無視する可能性があります。特定のファイルにアクセスできないようにしたい場合は、uid/gid オプションと組み合わせて使用​​することをお勧めします。
除外する
除外パターンの定義を含むファイル名を指定します。サーバーはこのファイルから除外リストの定義を読み取ります。
含む
要件を満たすファイルまたはディレクトリが除外されないように指定するために使用されます。これは、クライアント コマンドで --include を使用してパターンを指定するのと同じです。include と exclude を組み合わせると、複雑な exclude/include ルールを定義できます。
から含める
インクルード パターンの定義を含むファイル名を指定します。サーバーはこのファイルからインクルード リストの定義を読み取ります。
認証ユーザー
このオプションは、このモジュールへの接続が許可されるユーザー名のスペースまたはカンマ区切りのリストを指定します。ここでのユーザーはシステムユーザーとは何の関係もありません。 「auth users」が設定されている場合、モジュールへのクライアントの接続要求は、ID 検証のために rsync によってチャレンジされます。ここで使用されるチャレンジ/レスポンス認証プロトコル。ユーザー名とパスワードは、「secrets file」オプションで指定されたファイルにプレーンテキストで保存されます。デフォルトでは、パスワードなしで(つまり匿名で)モジュールに接続できます。
秘密ファイル
このオプションは、定義されたユーザー名:パスワードのペアを含むファイルを指定します。このファイルは、「auth users」が定義されている場合にのみ有効です。ファイルの各行には、ユーザー名:パスワードのペアが 1 つ含まれています。一般的に、パスワードは 8 文字を超えないようにしてください。デフォルトのセキュア ファイル名はないので、指定する必要があります (例: /etc/rsyncd.passwd)。注意: ファイルの権限は 600 である必要があります。そうでない場合、クライアントはサーバーに接続できません。
厳密なモード
このオプションは、パスワード ファイルの権限を監視するかどうかを指定します。オプション値が true の場合、パスワード ファイルには rsync サーバーを実行するユーザーのみがアクセスでき、他のユーザーはファイルにアクセスできません。デフォルト値は true です。
ホストは許可する
このオプションは、このモジュールに接続できる IP クライアントを指定します。顧客スキーマ定義は次の形式になります。
単一の IP アドレス、例: 192.167.0.1
ネットワークセグメント全体。例: 192.168.0.0/24、または 192.168.0.0/255.255.255.0
複数の IP またはネットワーク セグメントはスペースで区切る必要があり、「*」はすべてを意味します。デフォルトでは、すべてのホストが接続できます。
ホストは拒否
rsync サーバーへの接続を許可しないマシンを指定するには、hosts allow 定義メソッドを使用して定義できます。デフォルトでは、ホストの拒否定義はありません。
エラーを無視する
送信中に削除操作を実行するかどうかを決定するときに、rsyncd がサーバー上の IO エラーを無視するように指定します。通常、一時的なリソース不足やその他の IO エラーによって発生する重大な問題を防ぐために、rsync は IO エラーが発生すると --delete 操作をスキップします。
読めないものは無視する
rysnc サーバーが、ユーザーにアクセス権のないファイルを完全に無視することを指定します。これは、バックアップ先のディレクトリ内に、バックアップ受信者がアクセスできないファイルがある場合に意味を持ちます。
ロックファイル
最大接続パラメータをサポートするロック ファイルを指定します。デフォルト値は /var/run/rsyncd.lock です。
転送ログ
rsync サーバーが、ftp 形式のファイルを使用して、ダウンロードおよびアップロード操作を独自の個別のログに記録するようにします。
ログ形式
このオプションを使用すると、ユーザーは転送ログを使用するときにログ ファイルのフィールドをカスタマイズできます。形式は、書式指定子を含む文字列です。使用可能な書式指定子は次のとおりです。
%h リモートホスト名 %a リモート IP アドレス %l ファイルの長さ (文字数) %p この rsync セッションのプロセス ID
%o 操作タイプ: "send" または "recv"
%f ファイル名 %P モジュールパス %m モジュール名 %t 現在時刻 %u 認証されたユーザー名 (匿名の場合は null)
%b 実際に転送されたバイト数 %c ファイルを送信すると、このフィールドにファイルのチェックサムが記録されます。デフォルトのログ形式は、「%o %h [%a] %m (%u) %f %l」です。一般的に、各行のヘッダーに「%t [%p]」が追加されます。また、この形式のログ ファイルをカウントするための rsyncstats という Perl スクリプトもソース コードでリリースされています。
タイムアウト
このオプションを使用すると、顧客が指定した IP タイムアウト期間を上書きできます。このオプションにより、rsync サーバーがクラッシュしたクライアントを永久に待機することがなくなります。タイムアウトの単位は秒です。0 はタイムアウトが定義されていないことを意味し、これがデフォルト値でもあります。匿名 rsync サーバーの場合、適切な数値は 600 です。
オプションを拒否する
このオプションを使用すると、クライアントがこのモジュールで使用できないコマンド パラメータのリストを定義できます。ここでは省略形ではなく完全なコマンド名を使用する必要があります。ただし、コマンドが拒否された場合、サーバーはエラー メッセージを報告して終了します。圧縮が使用されないようにするには、「dont compressed = *」とする必要があります。
圧縮しない
圧縮されずに転送されるファイルを指定するために使用します。デフォルト値は *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz です。

一般的な rsync コマンド:

-v, --verbose 詳細出力モード -q, --quiet 簡潔出力モード -c, --checksum チェックサムスイッチをオンにして、ファイル転送の検証を強制します -a, --archive アーカイブモード。これは、ファイルを再帰的に転送し、すべてのファイル属性を保持することを意味し、-rlptgoD と同じです
 -r, --recursive サブディレクトリを再帰モードで処理します -R, --relative 相対パス情報を使用します -b, --backup バックアップを作成します。つまり、保存先に同じファイル名が既に存在する場合は、古いファイルの名前を ~filename に変更します。 --suffix オプションを使用して、異なるバックアップ ファイルのプレフィックスを指定できます。
 --backup-dir バックアップ ファイル (~filename など) をディレクトリに保存します。
 -suffix=SUFFIX はバックアップ ファイルのプレフィックス -u を定義します。--update は更新のみを実行します。つまり、DST に既に存在し、ファイル時刻がバックアップ対象のファイルよりも新しいすべてのファイルをスキップします。 (更新されたファイルを上書きしないでください)
 : : : : : : : : : : : : : : :
 -T --temp-dir=DIR DIR に一時ファイルを作成します --compare-dest=DIR また、DIR 内のファイルを比較して、バックアップが必要かどうかを判断します -P --partial と同等です
 --progress バックアップ プロセスを表示します -z, --compress 転送中にバックアップ ファイルを圧縮します --exclude=PATTERN 転送する必要のないファイル パターンを指定します --include=PATTERN 転送する必要があるが除外しないファイル パターンを指定します --exclude-from=FILE FILE で指定されたパターンを持つファイルを除外します --include-from=FILE FILE で指定されたパターンに一致するファイルを除外しません --version バージョン情報を出力します --address 特定のアドレスにバインドします --config=FILE 他の設定ファイルを指定します。デフォルトの rsyncd.conf ファイルは使用しません --port=PORT 他の rsync サービス ポートを指定します --blocking-io リモート シェルにブロッキング IO を使用します
 -stats は一部のファイルの転送ステータスを表示します --progress は転送中の転送の進行状況を表示します --log-format=formAT はログファイルの形式を指定します --password-file=FILE は FILE からパスワードを取得します --bwlimit=KBPS は I/O 帯域幅を 1 秒あたりのキロバイトに制限します
 -h, --help ヘルプ情報を表示する

Crontab の紹介:

Crond は、Linux で定期的に特定のタスクを実行したり、特定のイベントが処理されるのを待ったりするために使用されるデーモン プロセスです。これは、Windows のスケジュールされたタスクに似ています。オペレーティング システムをインストールすると、このサービス ツールがデフォルトでインストールされ、crond プロセスが自動的に開始されます。crond プロセスは、実行するタスクがあるかどうかを 1 分ごとに定期的にチェックします。実行するタスクがある場合、タスクは自動的に実行されます。
Linux でのタスク スケジューリングは、システム タスク スケジューリングとユーザー タスク スケジューリングの 2 つのカテゴリに分けられます。
システム タスクのスケジュール: キャッシュ データをハード ディスクに書き込む、ログをクリーンアップするなど、システムが定期的に実行する必要がある作業。 /etc ディレクトリには、システム タスクのスケジュール設定用の構成ファイルである crontab ファイルがあります。
/etc/crontab ファイルには次の行が含まれています。

[root@localhost ~]# cat /etc/crontab
シェル=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/

# 実行部分
51 * * * * ルート実行部分 /etc/cron.hourly
24 7 * * * ルート実行部分 /etc/cron.daily
22 4 * * 0 ルート実行部分 /etc/cron.weekly
42 4 1 * * ルート実行部分 /etc/cron.monthly

最初の 4 行は、crond タスクを実行するための環境変数を設定するために使用されます。SHELL 変数の最初の行は、システムが使用するシェルを指定します。ここでは bash です。PATH 変数の 2 行目は、システムがコマンドを実行するパスを指定します。MAILTO 変数の 3 行目は、crond タスクの実行情報が電子メールでルート ユーザーに送信されることを指定します。MAILTO 変数の値が空の場合、タスク実行情報はユーザーに送信されません。HOME 変数の 4 行目は、コマンドまたはスクリプトを実行するときに使用するホーム ディレクトリを指定します。

ユーザー タスクのスケジュール設定: ユーザー データのバックアップ、スケジュールされた電子メール リマインダーなど、ユーザーが定期的に実行する必要があるタスク。ユーザーは crontab ツールを使用して、スケジュールされたタスクを独自にカスタマイズできます。すべてのユーザー定義の crontab ファイルは /var/spool/cron ディレクトリに保存されます。ファイル名はユーザー名と同じです。

crontab ファイルの意味:

ユーザーが作成した crontab ファイルでは、各行がタスクを表し、各行の各フィールドが設定を表します。その形式は 6 つのフィールドに分かれています。最初の 5 つのセグメントは時間設定セグメントで、6 番目のセグメントは実行するコマンド セグメントです。形式は次のとおりです。

分 時間 日 月 週 コマンド

で:

minute: 分を表します。0 から 59 までの任意の整数になります。

hour: 時間を表します。0 から 23 までの任意の整数になります。

day: 日付を表します。1 から 31 までの任意の整数になります。

month: 月を表します。1 から 12 までの任意の整数になります。

week: 曜日を表します。0 から 7 までの任意の整数で、0 または 7 は日曜日を表します。

command: 実行するコマンド。システム コマンドまたは自分で作成したスクリプト ファイルになります。

上記の各フィールドでは、次の特殊文字も使用できます。

アスタリスク (*): すべての可能な値を表します。たとえば、月フィールドにアスタリスクが含まれている場合、他のフィールドの制約が満たされた後、毎月コマンド操作が実行されることを意味します。

カンマ(,):カンマで区切られた値のリスト範囲を指定できます。例:"1,2,5,7,8,9"

中央バー (-): 整数間の中央バーを使用して整数の範囲を表すことができます。たとえば、「2-6」は「2,3,4,5,6」を意味します。

スラッシュ (/): スラッシュを使用して時間間隔の頻度を指定できます。たとえば、「0-23/2」は 2 時間ごとに実行されることを意味します。同時に、スラッシュはアスタリスクと一緒に使用できます。たとえば、分フィールドで */10 を使用すると、10 分ごとに実行されることを意味します。

crontab の一般的なコマンド:

1. crontabファイルを一覧表示する

crontab ファイルを一覧表示するには、次のコマンドを使用します。

 [root@localhost ~]# crontab -l
 0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty

上記のような画面が表示されます。この方法を使用して、$HOME ディレクトリ内の crontab ファイルのバックアップを作成できます。

 [root@localhost ~]# crontab -l > $HOME/mycron

このように、誤って crontab ファイルを削除した場合でも、前のセクションで説明した方法を使用してすぐに復元できます。

2. crontabファイルを編集する

crontab ファイルのエントリを追加、削除、または編集する場合、編集環境変数が vi に設定されていれば、vi を使用して crontab ファイルを編集できます。対応するコマンドは次のとおりです。

[root@localhost ~]# crontab -e

vi を使用して他のファイルと同様に crontab ファイルを変更し、終了することができます。一部のエントリが変更されたり、新しいエントリが追加されたりすると、cron はファイルを保存するときに必要な整合性チェックを実行します。いずれかのフィールドに許容範囲外の値が表示された場合は、プロンプトが表示されます。

crontab ファイルを編集すると、新しいエントリが追加される場合があります。たとえば、次の内容を追加します。

# DT: 毎月 1、7、14、21、26、26 日の午前 3 時 30 分にコア ファイルを削除します (コメント)

 30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

保存して終了します。 crontab ファイルの各エントリにコメントを追加して、そのエントリが何を実行するのか、いつ実行されるのか、そしてさらに重要なことに、そのジョブを実行しているユーザーが誰なのかを把握しておくことをお勧めします。

ここで、前述の crontab -l コマンドを使用して、すべての情報を一覧表示してみましょう。

[root@localhost ~]# crontab -l 
 # (crondave は 1999 年 5 月 4 日火曜日 13:07:43 にインストールされました)
 # DT:30分ごとにコンソールに日付を表​​示します
 0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
 # DT: 毎月1、7、14、21、26、26日の午前3時30分にコアファイルを削除します
 30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} \;

3. crontabファイルを削除する

crontab ファイルを削除するには、次のコマンドを使用します。

 [root@localhost ~]# crontab -r

Crontabの使用例

例1: 1分ごとにコマンドを実行する

注文:

* * * * * 指示

例2: 毎週日曜日の夜00:00にrsync-shスクリプトを実行する

注文:

[root@localhost ~]# crontab -e
# DT:毎週日曜日の00:00にrsync-shスクリプトを実行する(コメント)
0 0 * * 7 sh /root/rsyncd/rsync-gitbak.sh

rsync クライアントは rsync サーバーと自動的に同期します。

まず、シェルスクリプトを作成しましょう

[root@localhost rsyncd]# vim rsyncd.sh
#!/bin/bash
rsync -arvz --progress /data [email protected]::log --password-file=/rsyncd/rsyncd.pass

コマンド: crontab -e スケジュールされたタスクを編集および追加する

[root@localhost ~]# crontab -e
# DT:毎週日曜日の00:00にrsync-shスクリプトを実行する(コメント)
0 0 * * 7 sh /root/rsyncd/rsyncd.sh

crontab -lを使用して、追加されたスケジュールされたタスクを表示します。

[root@localhost ~]# crontab -l
0 0 * * 7 sh /root/rsyncd/rsyncd.sh

知らせ:

1. 指定した時間にプログラムが実行されると、システムからプログラム実行内容を示すメールが送信されます。このようなメールを受信したくない場合は、各行の後にスペースを入れて > /dev/null 2>&1 を追加してください。

2. % は crontab では改行文字とみなされるため、\ でエスケープする必要があります。たとえば、crontab 実行行に「date +%Y%m%d」がある場合、これを「date +\%Y\%m\%d」に置き換える必要があります。

発生した問題と解決策:

Windows で sh スクリプトを編集し、Linux にアップロードしました。実行すると、エラー メッセージが表示されました。

不正なインタープリタ: そのようなファイルまたはディレクトリはありません

vim rsyncd.sh コマンド: set ff? を使用して、doc 形式か unix 形式かを確認します。dos 形式の場合は、コマンド: set ff=unix を使用して unix 形式に変換します。

以下もご興味があるかもしれません:
  • CentOS 7 で crontab を使用して定期的にタスクを実行する方法の詳細な説明
  • Linux CentOS で crontab を使用してスケジュールされた再起動を設定する方法
  • Centos7 で 5 分ごとにスケジュールされたタスクを実行するためのコマンドを crontab に記述する方法
  • Centos7 で crontab を使用して MySQL のスケジュールされたバックアップを実行する方法

<<:  JS 非同期実行の原則とコールバックの詳細

>>:  Linux 上の MySQL 5.5/5.6 で文字セットのエンコーディングを UTF8 に変更する方法

推薦する

HTML と CSS の命名規則の概要

CSS命名規則 ヘッダー: ヘッダーコンテンツ: コンテンツ/含むフッターナビゲーション: navサ...

mysql data_dirの変更によって発生するエラー問題を解決する

今日は、新しく購入した Alibaba Cloud ECS 環境 (Ubuntu 16.04 LTS...

Ubuntu 18.04 システムでの Redis および phpredis 拡張機能のインストールと設定の詳細な説明

この記事では、Ubuntu 18.04 に Redis と phpredis 拡張機能をインストール...

サーバーのDockerコンテナへのvscodeリモート接続を設定する方法

目次画像をプルするイメージを実行する(コンテナを生成する)コンテナを起動するコンテナに入るすべてのミ...

WeChat アプレットのシンプルなログイン ページの実装 (ソース コード付き)

目次1. 上の写真2. ユーザーが存在しない3. コードをアップロードする1. 上の写真 2. ユー...

Linux におけるドライバモジュールのパラメータ転送プロセスの分析

ドライバーモジュールに渡すパラメータ名、タイプ、権限を宣言します。 module_param(変数名...

IIS 7.5では、HTMLはSHTMLのようなinclude関数(モジュールマッピングの追加)をサポートします。

最初はたくさんのエラーを見つけましたが、実際には非常に簡単です。shtm の元の設定を参照するだけで...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

ウェブ理論: 考えさせない読書ノート

第 1 章<br /> Web ページをユーザーにとって使いやすいものにするための最も重...

HTML テーブルタグについての簡単な説明

主にその構造といくつかの重要な特性について説明します。少しずつ改善しながら紹介していきます。 1) ...

Linux に nodejs 環境とパス構成をインストールするための詳細な手順

Linux に Node.js をインストールする方法は 2 つあります。1 つは簡単で、解凍して使...

HTML タイトルに二重引用符を追加する方法

<a href="https://www.jb51.net/" title...

nginx を使用して同じドメイン名で複数の Vue プロジェクトをデプロイし、リバース プロキシを使用する方法

効果現在、プロジェクトは2つ(project1、project2)あり、nginxに付属するinde...

vue+django でファイルをダウンロードする例

目次1. 概要2. Django プロジェクト3. Vueプロジェクト1. 概要プロジェクトで、ダウ...

JS を使用して配列内の要素の存在を 10 分で判断する

序文フロントエンド開発では、配列内に要素が存在するかどうかを判断する必要があることがよくあります。実...