以前GitLabのバックアップ方法を紹介しましたが、今回はその応用としてバックアップの定期実行を実施してみたいと思います。
バックアップ用シェルスクリプトの作成
まずは事前準備としてバックアップの一連の動作を実行するシェルスクリプトを作成します。
# !/bin/bash
gitlab-rake gitlab:backup:create
rsync -a /etc/gitlab /var/opt/gitlab/backups/
exit 0
最低限これだけあればバックアップが実現できます。
本格的な運用を視野に入れて設計する場合は上記に加えてログの吐き出し機能を加えたりエラー等により失敗した場合の条件分岐を含めたりする必要があるかと思います。
シェルスクリプトファイルを作成後は以下コマンドで実行権限を追加します。
以下実行権限もまた実際に運用する際にはセキュリティに応じて付与する権限を考慮する必要があります。
sudo chmod 755 <スクリプトファイル名>
実行権限追加後、まずはスクリプトが正しく動くか実行してみます。
実行には以下のコマンドを入力します。
./<スクリプトファイル名>
実行後、バックアップ先に指定しているディレクトリ内に<バックアップ実行日時とGitLabのバージョン>_gitlab_backup.tar
ファイルとgitlab
ディレクトリが存在していれば正常に完了しています。
バックアップの定期実行
上記で作成したシェルスクリプトを一定期間で自動実行するように設定します。
定期実行には、cron
を使用します。
まずはcrontab -e
コマンドを実行します。
するとテキストエディタが起動しますので、以下の書式で定期実行したいタスクを定義します。
分 時 日 月 曜日 実行コマンド
例:
0 23 * * * /root/backup.sh #毎日23時に実行する
タスクの追加が完了したら、通常のテキストエディタと同様に:wq
を入力して閉じます。
書式に誤りが無ければcrontab: installing new crontab
といったメッセージが表示されます。
lsコマンドでバックアップ先のディレクトリを確認し、自動実行対象の時間でバックアップファイルが作成されていれば完了です。
起動時に実行させたい場合
定期実行の方法は上記の通りですが、私の場合はサーバーを常時稼働させている訳ではないので、サーバー起動時に自動実行させたいです。
そんな時はcrontab -e
コマンドを実行し、以下のように実行コマンドの前に日時ではなく@reboot
を記載します。
@reboot <実行対象のコマンド、スクリプト>
例:
@reboot /root/backup.sh
再起動後、バックアップ対象ディレクトリに起動時間付近のタイムスタンプでバックアップファイルが作成されていれば完了です。
ちなみに以前は/etc/rc.local
ファイルに実行コマンドを記載する事で同様にOS起動時に自動実行できるようですが、現在では非推奨らしいです。