1. 程式人生 > >CentOS 6.9 redis安裝與基本配置(上)

CentOS 6.9 redis安裝與基本配置(上)

使用下面的命令進行更新yum源並安裝redis服務:

yuminstall -y redis

serviceredis start

chkconfigredis on

安裝好之後,我們發現一個比較奇怪的問題(不確定是否與Redis版本有關,CentOS 7.4上沒遇到類似問題):

我們檢視redis服務狀態:

 

但是我們檢視redis服務埠偵聽情況:

 

可以看到redis服務是正常偵聽的,而且本地使用redis-cli也是可以連線的:

 

瞭解了一下,發現serviceredis status實際上是去呼叫/etc/init.d/redis這個指令碼檔案的status方法的,我們看一下

/etc/init.d/redis這個檔案內容(無關部分我們用……省略掉了):

#!/bin/sh

……

name="redis-server"

exec="/usr/bin/$name"

shut="/usr/libexec/redis-shutdown"

pidfile="/var/run/redis_6379.pid"

REDIS_CONFIG="/etc/redis.conf"

……

start() {

    [ -f $REDIS_CONFIG ] || exit 6

    [ -x $exec ] || exit 5

    echo -n $"Starting $name: "

    daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG --daemonize yes --pidfile $pidfile"

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}

……

rh_status() {

    status -p $pidfile $name

}

rh_status_q() {

    rh_status >/dev/null 2>&1

}

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart)

        $1

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    force-reload)

        force_reload

        ;;

    status)

        rh_status

        ;;

    condrestart|try-restart)

        rh_status_q || exit 0

        restart

        ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"

        exit 2

esac

exit $?

我們看到,在呼叫redisstatus引數的時候,會呼叫rh_status這個方法,這個方法實際上是去檢查pid檔案。我們再看一下,start方法中,會呼叫/usr/bin/redis-server這個執行檔案,對應生成一個pid檔案,看到有一個daemonize引數,去redis配置檔案檢視這個引數以及pid檔案的路徑:



可以看到預設redis是以daemon的方式執行的,但是配置檔案中pid檔案的路徑和/etc/init.d/redis指令碼檔案中的路徑不一致,所以我們嘗試修改一下指令碼中pid檔案路徑:pidfile="/var/run/redis.pid"

再次嘗試重啟服務發現仍然不行,檢視/var/run下面根本沒有生成redispid檔案:

 

這就奇怪了,難道redis沒有建立目錄的許可權?那我們手工建立一個/var/run/redis目錄,然後給redis使用者賦一個許可權:

 

再次嘗試一下重啟服務,這下正常了: