【第8回】自動化とバックアップの極意:シェルスクリプト×cronで実現する実務運用の完成形

こんにちは、リナックス先生です。ついに全8回の連載も最終回を迎えました!第1回でサーバーを構築してから、セキュリティ、パッケージ管理、サービス制御、ネットワーク、Web/DB構築、そして監視と、インフラエンジニアに必要な要素を一つずつ積み上げてきましたね。

連載を締めくくる第8回のテーマは、エンジニアを単純作業から解放する「自動化とバックアップの極意」です。プロの現場では「毎日手動でコマンドを打つ」ことは敗北を意味します。AlmaLinux 10の機能をフル活用し、シェルスクリプトとcronを組み合わせて、データが自動で守られ、OSが自律して動き続ける仕組みを完成させましょう。

コウ君

先生、ついに最終回ですね!これまで学んだことを全部使って、最後は「自動で動くサーバー」を作るんですね。でも、スクリプトを書くのって難しそうで……もし失敗してデータを消しちゃったらと思うと怖いです。

リナックス先生

コウ君、その「怖さ」を知っていることが、プロへの第一歩よ。だからこそ、スクリプトには「エラー処理」と「ログ」が必要なの。今日は、単に動くだけじゃない、実務で10年使い続けられる堅牢な自動化スクリプトの書き方を伝授するわ。集大成として、最高の一台を仕上げましょう!

【全8回】AlmaLinux 10 徹底攻略:次世代サーバー構築・運用講座

  • 第1回:AlmaLinux 10 爆速構築編
  • 第2回:初期設定と次世代セキュリティ編
  • 第3回:DNFとパッケージ管理の深淵編
  • 第4回:systemdと現代的なサービス管理編
  • 第5回:ネットワーク制御とnftables編
  • 第6回:Web・DBサーバー構築(LEMPスタック)編
  • 第7回:パフォーマンス分析とリソース監視編
  • ▶ 第8回:自動化とバックアップの極意編(完結!)

1. インフラエンジニアのためのシェルスクリプト作法

自動化の基本はシェルスクリプトですが、現場で求められるのは「壊れないスクリプト」です。初心者が書きがちな「コマンドを羅列しただけのスクリプト」を卒業しましょう。

プロが守る3つの鉄則

  • 「set -e」を使用する: コマンドが一つでも失敗したら、その場でスクリプトを停止させます。エラーを無視して進み、被害を拡大させるのを防ぎます。
  • 絶対パスで記述する: cronなどで実行される際、環境変数PATHが引き継がれないことがあります。tar ではなく /usr/bin/tar と書くのが安全です。
  • ログを残す: いつ実行され、成功したのか失敗したのかを logger コマンド等でシステムログに記録します。

💡 プロのノウハウ:変数のクォート(”)
実務ではファイル名にスペースが含まれる可能性があります。cp $file $backup と書くと、スペースが含まれた瞬間にスクリプトが壊れます。必ず cp "$file" "$backup" と、変数はダブルクォーテーションで囲む癖をつけましょう。これが「丁寧な仕事」です。


2. 実践:データベースとWebコンテンツの自動バックアップ

第6回で構築したLEMP環境を保護する、実戦的なバックアップスクリプトを作成します。データベース(MariaDB)のダンプと、Web公開ディレクトリの圧縮保存を同時に行います。

2-1. バックアップディレクトリの準備

sudo mkdir -p /backup/scripts /backup/data
sudo chown -R root:root /backup
sudo chmod 700 /backup

2-2. 統合バックアップスクリプトの作成

以下の内容を /backup/scripts/backup.sh として保存します。

#!/bin/bash
# -----------------------------------------------------
# AlmaLinux 10 Total Backup Script
# -----------------------------------------------------
set -e
set -u

# 設定
BACKUP_DIR="/backup/data"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7
DB_USER="root"
DB_PASS="Your_Database_Password" # 本来は別ファイルで管理推奨
TARGET_DIR="/usr/share/nginx/html"

# ログ出力関数
log_message() {
    logger -t "BACKUP_SCRIPT" "$1"
    echo "$(date '+%Y-%m-%d %H:%M:%S') $1"
}

log_message "Starting backup process..."

# 1. データベースバックアップ (MariaDB)
/usr/bin/mariadb-dump -u"$DB_USER" -p"$DB_PASS" --all-databases | /usr/bin/gzip > "$BACKUP_DIR/db_backup_$DATE.sql.gz"

# 2. Webコンテンツバックアップ
/usr/bin/tar -czf "$BACKUP_DIR/web_backup_$DATE.tar.gz" "$TARGET_DIR"

# 3. 古いバックアップの削除 (7日分保持)
/usr/bin/find "$BACKUP_DIR" -type f -mtime +$KEEP_DAYS -name "*.gz" -delete

log_message "Backup completed successfully."
# 実行権限を付与
sudo chmod +x /backup/scripts/backup.sh

# テスト実行
sudo /backup/scripts/backup.sh

⚠️ トラブルシューティング / 注意点
バックアップが「取れていること」を信じてはいけません。プロは必ず「リストア(復元)ができるか」を月に一度は検証します。圧縮ファイルが壊れていないか、tar -tf 等で中身を覗く習慣をつけましょう。


3. cronとsystemd-timer:定期実行の最適解

スクリプトが完成したら、それを定期的に実行させる仕組みに乗せます。

PR

3-1. 伝統的なcronによる設定

最も一般的で、設定が容易な方法です。毎朝3時に実行するよう設定します。

# 編集画面を開く
sudo crontab -e

# 以下の行を追加
0 3 * * * /backup/scripts/backup.sh > /dev/null 2>&1

3-2. systemd-timer:現代的な選択肢

AlmaLinux 10では、systemdの機能を使ってタイマー設定を行うことも推奨されています。cronに比べ、ログが journalctl で統合管理できる、依存関係を指定できるといったメリットがあります。

💡 プロのノウハウ:実行時間の分散
複数のサーバーを管理している場合、すべてのサーバーのバックアップを「3時0分」に設定してはいけません。ネットワークやバックアップ先のストレージに一斉に負荷がかかるため、少しずつ時間をずらす(スロットリング)のが現場の知恵です。


4. 連載の総括:AlmaLinux 10から始まるエンジニア人生

全8回、本当にお疲れ様でした。この連載を通じて、あなたは単なる「Linuxの操作ができる人」から「Linuxの構造を理解し、運用を設計できるエンジニア」への階段を上り始めました。

習得したコア技術 得られたプロの視点
1-2 インストール・SSH強化 「初期設定」がセキュリティの8割を決める
3-4 DNF 5・systemd OSの深部の仕組みを知れば、トラブルは怖くない
5-6 nftables・LEMP構築 サービス間の通信と「門番」の役割を理解する
7-8 監視・自動化 「可視化」と「効率化」が安定稼働の要である

AlmaLinux 10は非常に強力なOSです。しかし、ツールはあくまでツール。それをどう組み合わせ、どう守り、どう改善していくかは、エンジニアであるあなたの思考力にかかっています。この連載で学んだ基礎は、将来OSのバージョンが11, 12と上がっても、あるいは他のディストリビューションを触ることになっても、必ずあなたの助けになるはずです。


5. 最後に

「LINUX工房」の連載にお付き合いいただき、ありがとうございました。技術の世界は日進月歩ですが、公式ドキュメントを読み、手を動かし、失敗から学ぶという姿勢は普遍です。

あなたのサーバーが今日も安定して動き続けることを、そしてあなたが素晴らしいエンジニア・ライフを歩まれることを、リナックス先生は心から応援しています!

リナックス先生

卒業おめでとう、コウ君!これであなたも「リナックス先生の弟子」ね。困ったときはいつでもブログに戻ってきなさい。さあ、次はあなたが新しい技術を世界に発信する番よ!

▼ サーバー構築・開発を学ぶならVPSで ▼

エンジニア必須の環境
「おすすめVPS」

VPSランキングを見る

技術スキルを活かす
「ITエンジニア転職」

転職エージェントを見る

コメント