Redisエラーの解決方法:CONFIG REWRITE実行時の「(error) ERR The server is running without a config file」

intermediate🔴 Redis2026-07-20| Redis (全バージョン), Linux (Ubuntu/CentOS/Debian), Dockerコンテナ

Error Message

(error) ERR The server is running without a config file
#redis#設定#config-rewrite#管理#永続化

問題の背景Redisインスタンスを管理している際、CONFIG SETコマンドを使用して動的に設定を変更することはよくあります。例えば、サービスを再起動せずにmaxmemoryを増やしたり、appendonlyの状態を変更したりする場合です。これらの変更を永続化するための標準的な方法は、以下のコマンドを実行することです。

127.0.0.1:6379> CONFIG REWRITE

しかし、次のような特定のエラーメッセージが表示されることがあります。

(error) ERR The server is running without a config file

これは、Redisが物理的なredis.confファイルへのポインタなしで、単独のプロセスとして起動されたために発生します。Redisが設定ファイルの場所を認識していない場合、変更を保存するためにファイルを書き換えることができません。

なぜこのエラーが発生するのかRedisの起動方法には2つあります。1つは、引数として設定ファイルのパスを指定する方法です。もう1つは、バイナリのみを実行する方法で、この場合Redisは組み込みのデフォルト値を使用します。後者の方法を使用すると、Redisの設定に関してはすべてメモリ上で動作します。CONFIG REWRITEを実行すると、エンジンは初期化時に使用されたファイルパスを探します。パスが見つからないため、更新対象のファイルが存在しないというエラーがスローされます。

この状況を招く一般的なシナリオは以下の通りです。

  • redis-server /path/to/redis.confではなく、redis-serverで手動でサーバーを起動している。- Dockerコンテナにおいて、コマンドが単にredis-serverとなっており、設定ファイルがマッピングまたは指定されていない。- Systemdのユニットファイルにおいて、ExecStartディレクティブに設定ファイルの引数が不足している。## セットアップのデバッグ修正を適用する前に、Redisプロセスがどのように起動されたかを確認してください。Linuxシステムでは、psコマンドを使用して実行中のプロセスを調査します。
ps aux | grep redis-server

出力が以下のようであれば、問題が確認されたことになります。

redis     1234  0.1  0.5 150000 10000 ?        Ssl  10:00   0:01 /usr/bin/redis-server *:6379

ポート番号の後にファイルパスがないことに注目してください。正しく設定されたインスタンスは、以下のようになります。

redis     1234  0.1  0.5 150000 10000 ?        Ssl  10:00   0:01 /usr/bin/redis-server /etc/redis/redis.conf

解決策### 方法1:設定ファイルを使用して再起動する(推奨)最も確実な修正方法は、Redisが設定ファイルを使用して起動するようにすることです。設定ファイルがない場合は、公式のRedis GitHubリポジトリから、使用しているバージョンに対応するデフォルトのredis.confをダウンロードできます。

  • 設定ファイルを作成または配置します(通常は /etc/redis/redis.conf)。- 現在のRedisインスタンスを停止します: redis-cli shutdown- 設定ファイルのパスを明示的に指定してRedisを起動します: redis-server /etc/redis/redis.confSystemdを使用している場合は、/etc/systemd/system/redis.serviceまたは/lib/systemd/system/redis.serviceにあるサービスファイルを確認してください。ExecStartの行にパスが含まれていることを確認します。
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf

方法2:Docker環境の修正Dockerでは、コンテナがデフォルトのエントリポイントで起動されるため、このエラーが頻繁に発生します。これを修正するには、ローカルの設定ファイルをコンテナ内にマウントし、docker-compose.ymlまたはdocker runコマンドでそのファイルを使用するようRedisに指示する必要があります。

docker-compose.ymlのスニペット例:

services:
  redis:
    image: redis:latest
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]

方法3:再起動しない回避策Redisを再起動するためのダウンタイムを確保できないが、現在の実行時の設定をどうしても保存する必要がある場合は、現在の状態から手動でファイルを作成できます。これはやや強引な手法ですが、緊急時には有効です。

  • Redisに接続し、現在のすべての設定を取得します: redis-cli CONFIG GET * > current_config.txt- この出力はredis.confの形式ではありません(改行区切りのキーと値のペアです)。手動またはスクリプトを使用して、key value形式に整形する必要があります。- 有効なredis.confを作成した後も、将来的にCONFIG REWRITEを有効にするには、そのファイルを使用してRedisを再起動する必要があります。再起動なしで、実行中のRedisプロセスに設定ファイルを「アタッチ」する方法はありません。## 検証設定ファイルのパスを指定してRedisを再起動したら、修正が機能するか確認します。
  • redis-cliで接続します。- ダミーのパラメータを変更します: 127.0.0.1:6379> CONFIG SET loglevel notice- 書き換えを実行します: ``` 127.0.0.1:6379> CONFIG REWRITE ````OKが返ってくれば、修正は成功です。また、ファイルシステム上のredis.conf`ファイルのタイムスタンプを確認することもできます。コマンドを実行した時刻が反映されているはずです。

学んだ教訓- 常に設定ファイルを使用する: デフォルト設定を使用する場合でも、ファイルを使用してRedisを起動してください。これは、将来のCONFIG REWRITE操作のためのプレースホルダーとして機能します。- プロセスの引数を確認する: Redisのトラブルシューティングを行う際、最初のステップは常にps auxの出力を確認し、バイナリがどのように呼び出されたかを正確に把握することです。- 自動化: 構成管理ツール(Ansible、Chefなど)を使用している場合は、テンプレートが常にredis.confをデプロイし、サービスマネージャーがそれを明示的に指すようにしてください。

Related Error Notes