linux服务启动redis自动启动不了,Redis加入Centos Linux开机启动 您所在的位置:网站首页 redis启动不了原因 linux服务启动redis自动启动不了,Redis加入Centos Linux开机启动

linux服务启动redis自动启动不了,Redis加入Centos Linux开机启动

2023-12-09 02:09| 来源: 网络整理| 查看: 265

为了让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。

我们来看看这个脚本做了些什么:

a4c26d1e5885305701be709a3d33442f.png

#!/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

a4c26d1e5885305701be709a3d33442f.png

脚本中指定了端口、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 实验室设备网 版权所有