linux服务启动redis自动启动不了,Redis加入Centos Linux开机启动 | 您所在的位置:网站首页 › redis启动不了原因 › linux服务启动redis自动启动不了,Redis加入Centos Linux开机启动 |
为了让redis-server能在系统启动时自动运行,需要将redis服务作为守护进程(daemon)来运行,我们回到/usr/redis/目录中找到一个redis.conf的文件,这个文件是redis服务运行时加载的配置,我们先观察一下其中的内容 [zhxilin@localhost redis]$ vi redis.conf 此文件内容非常长,但是大部分是注释,我们重点关注其中的几个设置daemonize和pidfile: 其中daemonize默认值是false,pidfile默认值是pidfile /var/run/redis_6379.pid 第一个表示是否daemon化,显然我们要把它改成daemonize yes; 第二个表示当服务以守护进程方式运行时,redis默认会把pid写入/var/run/redis_6379.pid文件,服务运行中该文件就存在,服务一旦停止该文件就自动删除,因而可以用来判断redis是否正在运行。 保存后退出。 有了基本配置,redis还需要有一个管理启动、关闭、重启的一个脚本。redis源码里其实已经提供了一个初始化脚本,位置在/usr/redis/utils/redis_init_script。 我们来看看这个脚本做了些什么: #!/bin/sh# # chkconfig:2345 90 10# description: Redis is a persistent key-value database REDISPORT=6379EXEC=/lamp/redis-4.0.1/src/redis-server 我redis安装位置/lamp/redis-4.0.1CLIEXEC=/lamp/redis-4.0.1/src/redis-cliPIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/etc/redis/${REDISPORT}.conf" AUTH="1234" case "$1" instart)if[ -f $PIDFILE ]then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..."$EXEC $CONFfi;; stop)if[ ! -f $PIDFILE ]then echo "$PIDFILE does not exist, process is not running" elsePID=$(cat$PIDFILE)echo "Stopping ..."$CLIEXEC-p $REDISPORT shutdownwhile[ -x /proc/${PID} ]do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi;;*)echo "Please use start or stop as first argument";;esac 脚本中指定了端口、server路径、cli路径、pidfile路径以及conf路径,上述标黄的地方都需要正确配置,多说一句,如果在安装时执行了make install,那么这里的脚本不需要做多大改动,因为make install把server和cli都拷到/usr/local/bin下面了。 另外看到这里conf的路径,我们需要把redis目录下的redis.conf文件拷贝到/etc/redis/6379.conf [root@localhost utils]# cd /etc [root@localhost etc]#mkdirredis [root@localhost etc]#cp /lamp/redis-4.0.1/redis.conf /etc/redis/6379.conf 接着将redis_init_script脚本拷贝到/etc/init.d/redisd [root@localhost etc]# cpcp /lamp/redis-4.0.1/utils/redis_init_script /etc/init.d/redisd 在/etc/init.d下的脚本都是可以在系统启动是自动启动的服务,而现在还缺一个系统启动时的配置: [root@localhost zhxilin]# chkconfig redisd on 然后就会发现报了一个错误:服务 redisd 不支持 chkconfig ? #!/bin/sh # chkconfig:2345 90 10# description: Redis is a persistent key-value database 保存完重新拷贝到/etc/init.d/redisd后,再运行chkconfig就完成了。 一切就绪之后,可以执行以下命令检验service是否设置成功: [root@localhost zhxilin]# service redisd start [root@localhost zhxilin]# service redisd stop 等价于 [root@localhost zhxilin]# /etc/init.d/redisd start [root@localhost zhxilin]#/etc/init.d/redisd stop 最后重启一下系统吧,进入系统之后直接运行redis-cli检验redis服务是否已经自动运行了。 说明: # chkconfig: 2345 10 90 表示通过chkconfig配置,在linux中2、3、4、5项中启动,这个2345代表就linux系统的启动顺序具体,具体内容是:等级0表示:表示关机、等级1表示:单用户模式、等级2表示:无网络连接的多用户命令行模式、等级3表示:有网络连接的多用户命令行模式、等级4表示:不可用、 等级5表示:带图形界面的多用户模式、 等级6表示:重新启动 如果看不明白,自己百度chkconfig命令详细说明。 # description: Start and Stop redis 上面一句是描述 PATH=/usr/local/bin:/sbin:/usr/bin:/bin PATH是启动脚本使用的shell的搜索路径 REDISPORT=6379 REDISPORT指redis端口,启动redis使用 EXEC=/opt/redis-2.8.9/src/redis-server 安装redis后redis-server的绝对路径,在启动redis时使用 REDIS_CLI=/opt/redis-2.8.9/src/redis-cli redis连接程序绝对路径,在关闭redis时使用 PIDFILE=/var/run/redis.pid redis.conf配置文件中指定的pid路径地址,这里说明一下,在redis.conf配置文件中需要将daemonize这个参数项设置为 yes才会在redis启动时生成pid文件,很多新人不知道,没有生成pid文件,所以脚本里根据pid文件关闭redis就失败。 CONF="/etc/redis.conf" redis启动配置文件,启动使用 AUTH="1234" 如果redis设置了登录密码,就需要这个配置,具体看下面介绍stop的章节 start) # 这里判断PID文件是否存在,如果存在,就说明reids启动中或者运行异常,因为redis启动后会创建一个pid文件,如果正常关闭就会删除这个pid文件 if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed." else # 如果不存在pid文件,就启动reids,启动成功后提示 "Redis is running..." echo "Starting Redis server..." $EXEC $CONF fi if [ "$?"="0" ] then echo "Redis is running..." fi ;; stop) # 在关闭reids的时候,如果pid文件不存在,就判断redis没有启动 if [ ! -f $PIDFILE ] then echo "$PIDFILE exists, process is not running." else ## -- 如果存在pid文件,就获取pid编号,然后登录到redis中,输入SHUTDOWN 来停止redis服务 PID=$(cat $PIDFILE) echo "Stopping..." ## -- 本节例子是redis有设置登录密码的例子,如果没有登录密码,下面的命令就去掉-a $AUTH : $REDIS_CLI -p $REDISPORT SHUTDOWN $REDIS_CLI -p $REDISPORT -a $AUTH SHUTDOWN sleep 1 ## -- 循环判断pid文件是否存在,这里用的是是否可执行,道理一样,理解为程序是否停止就可以了,直到pid文件删除后,就说明redis关闭了。 while [ -x $PIDFILE ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped" fi ;; 最后说几个可能遇到的问题: 1. 如果启动脚本提示某个文件找不到,说明我们文件里的内容有误:比如cat $(PIDFILE)-x ${PIDFILE} 如果这些写在正常的指令或者字符串中正常,但是在判断表达式[]中就会出错 2.如果找不到pid文件,需要配置redis.conf配置中的选项打开。 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |