せっかく構築した自分だけのAnkiサーバーですから、データが消えてしまうリスクは確実に防いでおきたいですね。
Linuxの標準機能である cron(クーロン)という自動実行システムを使って、「毎日夜中に自動でデータを圧縮してバックアップし、古いものは自動で削除する」 という運用を手間なく実現する方法を解説します。
今回は、セキュリティを考慮して作成した anki ユーザーの権限でバックアップを設定します。
1. バックアップ用スクリプトの作成
まずは、バックアップ処理をまとめた小さなプログラム(シェルスクリプト)を作成します。
1. anki ユーザーに切り替える
sudo su - anki
2. バックアップ保存用のディレクトリを作成する
mkdir -p ~/anki-backup
3. スクリプトファイルを作成する
nano ~/anki-backup.sh
4. 以下のコードを貼り付ける
このスクリプトは、データを丸ごと圧縮(tar.gz形式)して保存し、ストレージ容量を圧迫しないよう「7日以上前の古いバックアップ」を自動で削除する仕組みになっています。
#!/bin/bash
# 日付を取得(例: 20260305_020000)
DATE=$(date +"%Y%m%d_%H%M%S")
# ディレクトリの指定
SOURCE_DIR="/home/anki/anki-data"
BACKUP_DIR="/home/anki/anki-backup"
BACKUP_FILE="$BACKUP_DIR/anki_data_$DATE.tar.gz"
# 1. データを圧縮してバックアップを作成
tar -czf "$BACKUP_FILE" -C /home/anki anki-data
# 2. 7日以上経過した古いバックアップファイルを自動削除
find "$BACKUP_DIR" -name "anki_data_*.tar.gz" -type f -mtime +7 -delete
5. 保存して終了し、スクリプトに実行権限を付与する
chmod +x ~/anki-backup.sh
2. cron(自動実行)の設定
作成したスクリプトを「毎日決まった時間」に動かすよう設定します。
1. crontab(自動実行のスケジュール表)を開く
※ まだ anki ユーザーのままで実行してください。
crontab -e
(初回起動時はエディタを聞かれることがあります。その場合は 1(nano)を選んでください)
2. ファイルの一番下に以下の1行を追記する
これは「毎日、深夜の午前2時0分にスクリプトを実行する」という設定です。
0 2 * * * /home/anki/anki-backup.sh
3. 保存して閉じる
crontab: installing new crontab と表示されれば設定完了です。
最後に exit と入力して、元のユーザー(sudo権限のあるユーザー)に戻っておきましょう。
exit
3. バックアップの復元方法(万が一の時)
もしサーバーのデータが飛んでしまったり、操作を誤ってカードを消してしまったりした場合は、以下の手順で簡単に元に戻せます。
- 壊れてしまった現在のデータを退避(または削除)する。
sudo mv /home/anki/anki-data /home/anki/anki-data_broken - 最新のバックアップファイルを解凍して展開する。
sudo tar -xzf /home/anki/anki-backup/anki_data_20260305_020000.tar.gz -C /home/anki - Ankiサーバーを再起動する。
sudo systemctl restart anki-sync-server.service
これで、サーバー構築からセキュリティ対策、タイムアウトのチューニング、そして自動バックアップまで、商用サービスレベルの堅牢なAnki同期サーバーが完成しました!


コメント