Sửa lỗi Redis: (error) ERR The server is running without a config file khi chạy CONFIG REWRITE

intermediate🔴 Redis2026-07-20| Redis (mọi phiên bản), Linux (Ubuntu/CentOS/Debian), Docker container

Error Message

(error) ERR The server is running without a config file
#redis#cấu hình#config-rewrite#quản trị#lưu trữ dữ liệu

Bối cảnh vấn đềTrong khi quản lý một instance Redis, việc thay đổi cấu hình trực tiếp (on the fly) bằng lệnh CONFIG SET là điều rất phổ biến. Ví dụ, bạn có thể tăng maxmemory hoặc thay đổi trạng thái appendonly mà không muốn khởi động lại dịch vụ. Để lưu các thay đổi này vĩnh viễn, cách làm tiêu chuẩn là chạy:

127.0.0.1:6379> CONFIG REWRITE

Tuy nhiên, bạn có thể gặp phải thông báo lỗi cụ thể sau:

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

Điều này xảy ra do Redis được khởi động như một tiến trình đơn thuần mà không trỏ đến một tệp redis.conf vật lý nào. Nếu Redis không biết tệp cấu hình của nó nằm ở đâu, nó không thể ghi đè (rewrite) để lưu các thay đổi của bạn.

Tại sao lỗi này xảy raRedis có thể khởi động theo hai cách. Cách thứ nhất là chỉ định đường dẫn tệp cấu hình làm đối số. Cách thứ hai là chỉ chạy tệp thực thi (binary) đơn lẻ, điều này khiến Redis sử dụng các giá trị mặc định có sẵn. Nếu bạn sử dụng phương pháp thứ hai, Redis sẽ hoạt động hoàn toàn trên bộ nhớ đối với phần cấu hình. Khi bạn kích hoạt CONFIG REWRITE, engine sẽ tìm kiếm đường dẫn tệp mà nó đã được khởi tạo cùng. Do không tìm thấy, nó sẽ báo lỗi vì không có tệp đích nào để cập nhật.

Các tình huống phổ biến dẫn đến lỗi này:

  • Khởi động server thủ công qua redis-server thay vì redis-server /path/to/redis.conf.- Docker containers trong đó lệnh chỉ là redis-server và cấu hình không được ánh xạ (mapped) hoặc chỉ định.- Các tệp unit Systemd thiếu đối số tệp cấu hình trong chỉ thị ExecStart.## Kiểm tra thiết lậpTrước khi áp dụng bản sửa lỗi, hãy xác nhận xem tiến trình Redis của bạn đã được khởi động như thế nào. Trên hệ thống Linux, hãy sử dụng ps để kiểm tra tiến trình đang chạy:
ps aux | grep redis-server

Nếu kết quả trả về trông như thế này, bạn đã xác nhận được vấn đề:

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

Lưu ý rằng không có đường dẫn tệp nào sau cổng (port). Một instance được cấu hình đúng sẽ trông như thế này:

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

Giải pháp### Cách 1: Khởi động lại với tệp cấu hình (Khuyên dùng)Cách khắc phục hiệu quả nhất là đảm bảo Redis khởi động cùng với một tệp cấu hình. Nếu bạn chưa có, bạn có thể tải xuống tệp redis.conf mặc định cho phiên bản của mình từ kho lưu trữ GitHub chính thức của Redis.

  • Tạo hoặc xác định vị trí tệp cấu hình của bạn (thường tại /etc/redis/redis.conf).- Dừng instance Redis hiện tại: redis-cli shutdown- Khởi động Redis đồng thời trỏ rõ ràng đến tệp cấu hình: redis-server /etc/redis/redis.confNếu bạn đang sử dụng Systemd, hãy kiểm tra tệp service tại /etc/systemd/system/redis.service hoặc /lib/systemd/system/redis.service. Đảm bảo dòng ExecStart bao gồm đường dẫn:
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf

Cách 2: Khắc phục trong môi trường DockerTrong Docker, lỗi này thường xảy ra do container khởi động với entrypoint mặc định. Để khắc phục, bạn phải gắn (mount) một tệp cấu hình cục bộ vào container và yêu cầu Redis sử dụng tệp đó trong tệp docker-compose.yml hoặc lệnh docker run.

Ví dụ đoạn mã 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"]

Cách 3: Giải pháp tạm thời không cần khởi động lạiNếu bạn không thể dừng hệ thống để khởi động lại Redis nhưng thực sự cần lưu cấu hình đang chạy hiện tại, bạn có thể tạo một tệp thủ công từ trạng thái hiện tại. Đây là một mẹo nhỏ nhưng hiệu quả trong các tình huống khẩn cấp.

  • Kết nối với Redis và lấy tất cả các cấu hình hiện tại: redis-cli CONFIG GET * > current_config.txt- Kết quả này không ở định dạng redis.conf (đó là các cặp key-value trên các dòng mới). Bạn sẽ cần định dạng lại thủ công hoặc qua một script thành định dạng key value.- Sau khi đã tạo một tệp redis.conf hợp lệ, bạn vẫn phải khởi động lại Redis với tệp đó để cho phép CONFIG REWRITE hoạt động trong tương lai. Không có cách nào để "gắn" một tệp cấu hình vào một tiến trình Redis đang chạy mà không khởi động lại.## Xác minhSau khi bạn đã khởi động lại Redis với đường dẫn tệp cấu hình, hãy xác minh xem bản sửa lỗi có hoạt động hay không:
  • Kết nối qua redis-cli.- Thay đổi một tham số giả định: 127.0.0.1:6379> CONFIG SET loglevel notice- Thực hiện ghi đè: 127.0.0.1:6379> CONFIG REWRITENếu nó trả về OK, việc sửa lỗi đã thành công. Bạn cũng có thể kiểm tra dấu thời gian (timestamp) của tệp redis.conf trên hệ thống tệp; nó sẽ phản ánh thời điểm bạn chạy lệnh.

Bài học rút ra- Luôn sử dụng tệp cấu hình: Ngay cả khi bạn dự định sử dụng các thiết lập mặc định, hãy khởi động Redis với một tệp cấu hình. Nó đóng vai trò như một vị trí giữ chỗ cho các hoạt động CONFIG REWRITE trong tương lai.- Kiểm tra đối số tiến trình: Khi xử lý sự cố Redis, bước đầu tiên luôn phải là kiểm tra đầu ra của ps aux để xem chính xác cách binary được gọi.- Tự động hóa: Nếu sử dụng quản lý cấu hình (Ansible, Chef, v.v.), hãy đảm bảo các template của bạn luôn triển khai một tệp redis.conf và trình quản lý dịch vụ của bạn trỏ đến nó một cách rõ ràng.

Related Error Notes