・CentOSのファイルを定期的にバックアップしたい。
・具体的な手順を教えてほしい。
こういった疑問に答えます。
本記事の内容
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
こういった私が、解説していきます。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
CentOS8でファイルを定期的にバックアップするcronの設定
今回のバックアップ処理イメージ
- CentOS8の
/home
配下のファイルを圧縮してバックアップ - バックアップ先は、共有ファイルサーバとして使っているWindows10の外付けHDD
- Windows10の外付けHDDを、CIFSでCentOS8にマウント
- バックアップファイル作成用のシェルを作成してcronで定期的に実行
- cron実行結果をメールで送信
バックアップ先のディスクをマウント
バックアップ用のシェル作成(環境変数設定)
~/system/shl/bkup_setting.sh
###################### # バックアップ対象 TARGET_DIR=/home # バックアップ先 BACKUP_DIR=/win/home # バックアップ後のファイル名 BACKUP_FILE_NAME=home-`/bin/date +%Y%m%d_%H%M%S`.tar.gz ####################### function err(){ echo $@ 1>&2 exit 1 }
バックアップ用のシェル作成(バックアップ実行)
~/system/shl/bkup_home.sh
#!/bin/bash source /home/●●●●●/system/shl/bkup_setting.sh echo -e "\nstart bkup_home.sh : `date`" if [ ! -e $BACKUP_DIR ]; then err "ディレクトリが見つかりません: BACKUP_DIR = " $BACKUP_DIR fi # バックアップ処理 echo start gzip : `date` if [ -d $TARGET_DIR ]; then tar --directory="${TARGET_DIR}" --use-compress-program=gzip --warning=no-file-changed -cpf ${BACKUP_DIR}/${BACKUP_FILE_NAME} ./ if [ $? -eq 0 ] || [ $? -eq 1 ]; then echo "バックアップ完了 : `date`" else err "バックアップエラー : `date`" fi else err "バックアップ対象のディレクトリが見つかりません: TARGET_DIR = " $TARGET_DIR fi
noanacronのインストール
dnf install cronie-noanacron
# dnf install cronie-noanacron 依存関係が解決しました。 ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== インストール中: cronie-noanacron x86_64 1.5.2-4.el8 BaseOS 19 k トランザクションの概要 ======================================================================================================================== インストール 1 パッケージ ダウンロードサイズの合計: 19 k インストール済みのサイズ: 396 これでよろしいですか? [y/N]: y
パッケージのダウンロード: cronie-noanacron-1.5.2-4.el8.x86_64.rpm 185 kB/s | 19 kB 00:00 ------------------------------------------------------------------------------------------------------------------------ 合計 42 kB/s | 19 kB 00:00 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : cronie-noanacron-1.5.2-4.el8.x86_64 1/1 検証 : cronie-noanacron-1.5.2-4.el8.x86_64 1/1 インストール済み: cronie-noanacron-1.5.2-4.el8.x86_64 完了しました!
anacronのアンインストール
dnf remove cronie-anacron
# dnf remove cronie-anacron 依存関係が解決しました。 ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== 削除中: cronie-anacron x86_64 1.5.2-4.el8 @anaconda 49 k トランザクションの概要 ======================================================================================================================== 削除 1 パッケージ 解放された容量: 49 k これでよろしいですか? [y/N]: y
トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 削除 : cronie-anacron-1.5.2-4.el8.x86_64 1/1 scriptlet の実行中: cronie-anacron-1.5.2-4.el8.x86_64 1/1 検証 : cronie-anacron-1.5.2-4.el8.x86_64 1/1 削除済み: cronie-anacron-1.5.2-4.el8.x86_64 完了しました!
crondの再起動
systemctl restart crond
systemctl status crond
$ sudo systemctl restart crond $ sudo systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-11-15 08:51:04 JST; 7s ago Main PID: 242259 (crond) Tasks: 1 (limit: 11032) Memory: 1.0M CGroup: /system.slice/crond.service mq242259 /usr/sbin/crond -n 11月 15 08:51:04 sv-neptune systemd[1]: Started Command Scheduler. 11月 15 08:51:04 sv-neptune crond[242259]: (CRON) STARTUP (1.5.2) 11月 15 08:51:04 sv-neptune crond[242259]: (CRON) INFO (Syslog will be used instead of sendmail.) 11月 15 08:51:04 sv-neptune crond[242259]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 52% if used.) 11月 15 08:51:04 sv-neptune crond[242259]: (CRON) INFO (running with inotify support) 11月 15 08:51:04 sv-neptune crond[242259]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
mailxのインストール
dnf install mailx
$ sudo dnf install mailx [sudo] ●●●● のパスワード: メタデータの期限切れの最終確認: 1:08:37 時間前の 2020年11月14日 16時51分58秒 に実施しました。 依存関係が解決しました。 ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== インストール中: mailx x86_64 12.5-29.el8 BaseOS 257 k トランザクションの概要 ======================================================================================================================== インストール 1 パッケージ ダウンロードサイズの合計: 257 k インストール済みのサイズ: 491 k これでよろしいですか? [y/N]: y
パッケージのダウンロード: mailx-12.5-29.el8.x86_64.rpm 2.1 MB/s | 257 kB 00:00 ------------------------------------------------------------------------------------------------------------------------ 合計 526 kB/s | 257 kB 00:00 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : mailx-12.5-29.el8.x86_64 1/1 scriptlet の実行中: mailx-12.5-29.el8.x86_64 1/1 検証 : mailx-12.5-29.el8.x86_64 1/1 Installed products updated. インストール済み: mailx-12.5-29.el8.x86_64 完了しました!
~/.mailrc
の設定
$ vi ~/.mailrc
set smtp=smtp://sv-earth
set from="●●●●●@sv-neptune.local"
メール送信のテスト
mail ●●●●●@ad.planet.jp
$ mail ●●●●●@ad.planet.jp Subject: test ←★件名 test ←★本文 . ←★ピリオドで終了 EOT
visudo
の編集
Defaults: ●●●●●ユーザー名 !requiretty ●●●●●ユーザー名 ALL=(root) NOPASSWD: ALL
crontabの設定
crontab -e
crontab -l
MAILTO="" 20 12 * * 0 sudo /home/●●●●●/system/shl/bkup_home.sh 2>&1 | mail -s "[SV-NEPTUNE]Cron <bkup_home>" ●●●●●@ad.planet.jp
今回の例では、毎週日曜(0)の12時20分 にバックアップを実行するように設定しました。
設定した時間に、バックアップが実行されて、メールが届きました。