そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

【CentOS8】ファイルの定期バックアップ【cronで自動化】

※[PR]当ブログの記事の中にはプロモーションが含まれています。

ファイルの定期バックアップ

CentOSのファイルを定期的にバックアップしたい。
・具体的な手順を教えてほしい。

こういった疑問に答えます。

本記事の内容

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。

こういった私が、解説していきます。

私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

CentOS8でファイルを定期的にバックアップするcronの設定

今回のバックアップ処理イメージ

ファイルの定期バックアップ

  • CentOS8の/home配下のファイルを圧縮してバックアップ
  • バックアップ先は、共有ファイルサーバとして使っているWindows10の外付けHDD
  • Windows10の外付けHDDを、CIFSでCentOS8にマウント
  • バックアップファイル作成用のシェルを作成してcronで定期的に実行
  • cron実行結果をメールで送信

バックアップ先のディスクをマウント

souiunogaii.hatenablog.com

バックアップ用のシェル作成(環境変数設定)

~/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

1115 08:51:04 sv-neptune systemd[1]: Started Command Scheduler.
1115 08:51:04 sv-neptune crond[242259]: (CRON) STARTUP (1.5.2)
1115 08:51:04 sv-neptune crond[242259]: (CRON) INFO (Syslog will be used instead of sendmail.)
1115 08:51:04 sv-neptune crond[242259]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 52% if used.)
1115 08:51:04 sv-neptune crond[242259]: (CRON) INFO (running with inotify support)
1115 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 時間前の 20201114165158秒 に実施しました。
依存関係が解決しました。
========================================================================================================================
 パッケージ                アーキテクチャー           バージョン                       リポジトリー               サイズ
========================================================================================================================
インストール中:
 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分 にバックアップを実行するように設定しました。

設定した時間に、バックアップが実行されて、メールが届きました。

ファイルの定期バックアップ

ファイルの定期バックアップ