Redis 版本爲 5.0.4;redis
文件 /etc/systemd/system/redis.service
內容以下:ui
[Unit] Description=Redis Datastore Server After=network.target [Service] Type=forking PIDFile=/var/run/redis/redis_6379 User=redis Group=redis Environment=statedir=/var/run/redis PermissionsStartOnly=true ExecStartPre=/bin/mkdir -p ${statedir} ExecStartPre=/bin/chown -R redis:redis ${statedir} ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf --supervised systemd ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target
在使用 systemctl 啓動 Redis 時報錯:rest
sudo systemctl daemon-reload sudo systemctl start redis
錯誤日誌:日誌
Job for redis-server.service failed because the control process exited with error code. See "systemctl status redis-server.service" and "journalctl -xe" for details.
根據提示用命令 systemctl status redis-server.service
查看結果以下:code
● redis-server.service - Redis Datastore Server Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: failed (Result: start-limit-hit) since Thu 2019-04-18 15:36:10 CST; 5s ago Process: 8341 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf --supervised systemd (code=exited Process: 8337 ExecStartPre=/bin/chown -R redis:redis ${statedir} (code=exited, status=0/SUCCESS) Process: 8333 ExecStartPre=/bin/mkdir -p ${statedir} (code=exited, status=0/SUCCESS) Apr 18 15:36:10 dl26 systemd[1]: Failed to start Redis Datastore Server. Apr 18 15:36:10 dl26 systemd[1]: redis-server.service: Unit entered failed state. Apr 18 15:36:10 dl26 systemd[1]: redis-server.service: Failed with result 'exit-code'. Apr 18 15:36:10 dl26 systemd[1]: redis-server.service: Service hold-off time over, scheduling restart. Apr 18 15:36:10 dl26 systemd[1]: Stopped Redis Datastore Server. Apr 18 15:36:10 dl26 systemd[1]: redis-server.service: Start request repeated too quickly. Apr 18 15:36:10 dl26 systemd[1]: Failed to start Redis Datastore Server. Apr 18 15:36:10 dl26 systemd[1]: redis-server.service: Unit entered failed state. Apr 18 15:36:10 dl26 systemd[1]: redis-server.service: Failed with result 'start-limit-hit'.
發現 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf --supervised systemd
報錯,執行該命令出現以下錯誤日誌:server
*** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 88 >>> 'protected-mode yes' Bad directive or wrong number of arguments
問題是在處理配置文件時出現參數不匹配現象,緣由是由於我在用源碼安裝 redis 後還用 apt-get install redis
的方法安裝了一箇舊版本的 redis,在 /usr/bin/
目錄下的 redis-server 不是最新版本,故出現不兼容的問題。ip
解決方法:get
cp -r redis/src/redis-server /usr/bin/redis-server
再次執行:源碼
sudo systemctl daemon-reload sudo systemctl start redis
仍然報一樣的錯誤,執行/usr/bin/redis-server /etc/redis/redis.conf --supervised systemd
,日誌以下:it
8436:C 18 Apr 2019 15:37:50.558 # Can't chdir to '/home/chenxiang/redis': No such file or directory
發現是目錄名稱不存在,文件 /etc/redis/redis.conf
中的目錄名稱爲 /home/chenxiang/redis
,而實際 redis 目錄名稱爲 /home/chenxiang/redis-5.0.4
,修改實際目錄名稱爲 redis
即解決這一問題。
繼續運行:
sudo systemctl daemon-reload sudo systemctl start redis
出現了新的錯誤:
Job for redis-server.service failed because a timeout was exceeded. See "systemctl status redis-server.service" and "journalctl -xe" for details.
經過 systemctl status redis-server.service
查看日誌信息:
● redis-server.service - Redis Datastore Server Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: activating (start) since Thu 2019-04-18 15:49:48 CST; 1min 21s ago Process: 8533 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf --supervised systemd (code=exited Process: 8530 ExecStartPre=/bin/chown -R redis:redis ${statedir} (code=exited, status=0/SUCCESS) Process: 8527 ExecStartPre=/bin/mkdir -p ${statedir} (code=exited, status=0/SUCCESS) CGroup: /system.slice/redis-server.service └─8535 /usr/bin/redis-server 127.0.0.1:6379 Apr 18 15:49:48 dl26 systemd[1]: Starting Redis Datastore Server... Apr 18 15:49:48 dl26 redis-server[8533]: 8533:C 18 Apr 2019 15:49:48.250 # oO0OoO0OoO0Oo Redis is start Apr 18 15:49:48 dl26 redis-server[8533]: 8533:C 18 Apr 2019 15:49:48.250 # Redis version=5.0.4, bits=64 Apr 18 15:49:48 dl26 redis-server[8533]: 8533:C 18 Apr 2019 15:49:48.250 # Configuration loaded Apr 18 15:49:48 dl26 redis-server[8533]: 8533:C 18 Apr 2019 15:49:48.250 # systemd supervision requeste Apr 18 15:49:48 dl26 systemd[1]: redis-server.service: PID file /var/run/redis/redis_6379 not readable
發現 redis-server.service 沒有足夠的權限訪問 /var/run/redis/redis_6379
,須要修改/etc/systemd/system/redis.service
爲:
[Unit] Description=Redis Datastore Server After=network.target [Service] Type=forking PIDFile=/var/run/redis/redis.pid User=redis Group=redis Environment=statedir=/var/run/redis PermissionsStartOnly=true ExecStartPre=/bin/mkdir -p ${statedir} ExecStartPre=/bin/chown -R redis:redis ${statedir} ExecStartPost=/bin/sh -c "echo 6739 > /var/run/redis/redis.pid" ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf --supervised systemd ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target
其中修改兩行:PIDFile=/var/run/redis/redis.pid
,以及 ExecStartPost=/bin/sh -c "echo 6739 > /var/run/redis/redis.pid"
。
2019.4