zoukankan      html  css  js  c++  java
  • Redis 错误:Failed with result 'start-limit-hit'

    Redis 错误:Failed with result 'start-limit-hit'

    背景

    Redis 版本为 5.0.4;

    文件 /etc/systemd/system/redis.service 内容如下:

    [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 时报错:

    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 查看结果如下:

    ● 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 报错,执行该命令出现如下错误日志:

    *** 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 不是最新版本,故出现不兼容的问题。

    解决方法:

    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,日志如下:

    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

  • 相关阅读:
    ajax获取数据中文乱码问题最简单的完美解决方案
    修改easyui默认datagrid的表格内字体大小,样式
    setTimeout延迟加载方法的使用
    解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList的问题
    模块和包
    常用模块
    匿名函数及推导式
    python-迭代器和生成器
    python-内置函数
    python-递归
  • 原文地址:https://www.cnblogs.com/qq952693358/p/10730081.html
Copyright © 2011-2022 走看看