Redisを利用している環境では、何らかの理由でRedisが停止してしまう可能性があります。このような状況に備えて、Redisの状態を定期的に監視し、停止していた場合には自動的に再起動するシェルスクリプトを作成する方法をご紹介します。
1. スクリプトの概要
このスクリプトは以下の処理を行います:
- Redisの状態をチェック
- Redisが停止している場合、再起動を試行
- 再起動の成否をログに記録
このスクリプトを定期的に実行することで、Redisが停止した場合に自動で復旧させることが可能になります。
2. スクリプトの作成
以下のスクリプトを check_redis.sh
という名前で保存してください。
スクリプトコード
#!/bin/bash
# RedisのCLIとサーバーのパス
REDIS_CLI=~/redis-server/bin/redis-cli
REDIS_SERVER=~/redis-server/bin/redis-server
REDIS_CONF=~/redis-server/redis.conf
# Redisが動作しているか確認
$REDIS_CLI PING > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "$(date): Redis is not running. Attempting to restart..."
# Redisを再起動
$REDIS_SERVER $REDIS_CONF --daemonize yes
if [ $? -eq 0 ]; then
echo "$(date): Redis restarted successfully."
else
echo "$(date): Failed to restart Redis."
fi
else
echo "$(date): Redis is running."
fi
スクリプトの説明
REDIS_CLI
とREDIS_SERVER
Redis CLIとRedisサーバーのパスを指定します。インストールパスに応じて適宜変更してください。- Redisの状態確認
$REDIS_CLI PING
を使用してRedisが応答するか確認します。応答がない場合は停止していると判断します。 - Redisの再起動
$REDIS_SERVER
コマンドを実行して再起動を試みます。再起動の成否をログに記録します。
3. スクリプトの実行
スクリプトを実行可能にするため、以下のコマンドで権限を変更します。
chmod +x check_redis.sh
その後、スクリプトを直接実行して動作確認を行います。
./check_redis.sh
Redisが正常に動作している場合は「Redis is running.」と表示されます。停止していた場合は再起動を試みたログが表示されます。
4. 自動実行の設定 (cronジョブ)
スクリプトを定期的に実行するために、cron
を設定します。
cronジョブの設定手順
- crontabの編集 以下のコマンドを実行します。
crontab -e
- ジョブを追加 例えば、5分ごとにスクリプトを実行する場合は、以下の行を追加します。
*/5 * * * * /bin/bash /path/to/check_redis.sh >> /path/to/redis_monitor.log 2>&1
/path/to/check_redis.sh
はスクリプトのフルパスに置き換えてください。>> /path/to/redis_monitor.log
はログファイルのパスに置き換え可能です。
5. 動作確認
- スクリプトを直接実行し、Redisの状態確認と再起動が動作するか確認します。
/bin/bash /path/to/check_redis.sh
- Redisを手動で停止し、スクリプトが再起動を試みるか確認します。
~/redis-server/bin/redis-cli shutdown
/bin/bash /path/to/check_redis.sh
6. 応用: ログ管理と通知機能
- ログの保存先を整理する
/path/to/redis_monitor.log
に定期的な状態チェックの記録を残すことで、Redisの動作履歴を追跡できます。 - 通知機能の追加
再起動が発生した際に、メールやチャットツール(例: Chatwork, Slack)で通知を送るようカスタマイズすることも可能です。
まとめ
このスクリプトを利用することで、Redisの停止によるサービスダウンを防ぎ、安定した運用が可能になります。特に、サーバー環境でのトラブルに備えるには、こうした自動監視スクリプトが役立ちます。ぜひお試しください!
コメント