シェルスクリプトで定期的にファイルをバックアップする方法
目次
スポンサードリンク
Linuxにはファイルやディレクトリをまとめて圧縮できるtarコマンドがあります。手動でバックアップを取るときに便利なコマンドです。
手動でバックアップを取る際はコマンドを実行すればよいですが、1日1回、決まった時間にファイルのバックアップを取りたいときなど定期的にバックアップを取る場合はシェルスクリプトを用意しましょう。
サンプルコード
#!/bin/bash
TODAY=`date +%Y%m%d`
BACKUP_FILE=/backup/backup.$TODAY.tgz
tar -zc --exclude=archive -f $BACKUP_FILE -C / var/log/httpd/
このファイルを backup.sh として保存し、chmodコマンドで実行権限を付与しておきます。今回は /root/bin ディレクトリに保存しておきます。
変数TODAYにコマンド実行日を保存しておきます。変数BACKUP_FILEには、取得したバックアップを保存するディレクトリ、ファイル名を指定します。今回は「/backup/backup.20240313.tgz」というファイルを作成しgzipでの圧縮します。
tarコマンドでは、/var/log/httpd内のファイルをバックアップするように指定しています。–excludeオプションでバックアップに含めないファイル(ディレクト)を指定しています。-Cオプションではカレントディレクトリを指定したディレクトリに変更してから実行しています。「logger -p info “XXXXXX”」をスクリプトに含めておけばsyslogに実行したタイミングでログを保存しておけます。証跡としてログを残しておくのもいいですね。
cronで定期的にシェルスクリプトを実行する
crontab -e コマンドで定期実行のスケジュールを登録するファイルを開きましょう。以下はコマンド登録のサンプルです。実行したいタイミングをcronの記法で書いてから実行するコマンドをフルパスで記述します。
# crontab -e
#毎日0時0分に実行
0 0 * * * /root/bin/backup.sh
#月曜日の0時0分に実行(1:月、2:火、3:水、4:木、5:金、6:土、7or0:日)
0 0 * * 1 /root/bin/backup.sh
#毎月1日の0時0分に実行
0 0 1 * * /root/bin/backup.sh
シェルスクリプト内のディレクトリ指定箇所やオプション、crontabで指定する実行タイミングをカスタマイズすれば応用の利くバックアップスクリプトを用意してみてください。
シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。
Search
Recent Posts
- カーネル更新やパッケージのパッチ適用後、OSの再起動が必要か確認するLinuxコマンド(needs-restarting)
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法