2017-10-01 15 views
2

init 스크립트를 통해 redis 서버를 종료 할 수 없습니다. 이것은 sudo reboot 일 때 거대한 부작용 내 컴퓨터 걸기. canonical guide를 사용하여Redis에 연결할 수 없습니다. 127.0.0.1:0 : 연결이 거부되었습니다 (init 스크립트를 사용하여 유닉스 서버가있는 redis 서버를 종료 할 때)

I 새로 설치된 레디 스는, 유닉스 소켓 연결을 허용하도록 구성하고, 내가 이전에 저장 한 .rdb 덤프를 복원 할 수 있도록 지금 정지 서버를 시도하고있다.

는하지만 다음 점점 계속 :

Could not connect to Redis at 127.0.0.1:0: Connection refused 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 

내가 사용 명령은 sudo /etc/init.d/redis-server stop입니다. redis-cli -s /var/run/redis.sock에 연결 한 후에도 shutdown을 발행 할 수는 있지만 작동하려면 init 스크립트가 필요합니다.

왜 다시 부팅되지 않겠습니까?이 상황을 어떻게 해결할 수 있습니까? 버전은 내가 자연스럽게 unixsocket /var/run/redis.sockunixsocketperm 755 alongwith, 설정 파일에 port 0을 설정 한 Redis server v=4.0.2 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=8ddba2e6a24ce078


입니다.

또한, 스크립트 파일의 내용은 다음과 같습니다

!/bin/sh 
# 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 

REDISPORT=0 
EXEC=/usr/local/bin/redis-server 
CLIEXEC=/usr/local/bin/redis-cli 

PIDFILE=/var/run/redis.pid 
CONF="/etc/redis/redis.conf" 

case "$1" in 
    start) 
     if [ -f $PIDFILE ] 
     then 
       echo "$PIDFILE exists, process is already running or crashed" 
     else 
       echo "Starting Redis server..." 
       $EXEC $CONF 
     fi 
     ;; 
    stop) 
     if [ ! -f $PIDFILE ] 
     then 
       echo "$PIDFILE does not exist, process is not running" 
     else 
       PID=$(cat $PIDFILE) 
       echo "Stopping ..." 
       $CLIEXEC -p $REDISPORT shutdown 
       while [ -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 

참고 REDISPORT=0, 그것이 있어야한다. 현재 Redis 서버 중지 및 시작은 실제로 지원되지 않습니다.

+0

사용중인 암호 인증을? 그렇다면이 PR이 빛을 발산합니다. https://github.com/antirez/redis/pull/2069 –

답변

0

질문에 게시 된 init 스크립트를 사용자 정의했습니다. 나는 redis의 init 스크립트 지원을 기반으로 유닉스 소켓 기반 종료를해야했다. OOTB를 지원하지 않습니다.

은 여기 내 스크립트를 찾고 결국 방법은 다음과 같습니다

당신이 sudo service redis-server stop을 발행하려고, 스크립트를 변경하면
#!/bin/sh 
# 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 

REDISPORT=0 
EXEC=/usr/local/bin/redis-server 
CLIEXEC=/usr/local/bin/redis-cli 

REDISSOCKET="/var/run/redis.sock" 

PIDFILE=/var/run/redis.pid 
CONF="/etc/redis/redis.conf" 

case "$1" in 
    start) 
     if [ -f $PIDFILE ] 
     then 
       echo "$PIDFILE exists, process is already running or crashed" 
     else 
       echo "Starting Redis server..." 
       $EXEC $CONF 
     fi 
     ;; 
    stop) 
     if [ ! -f $PIDFILE ] 
     then 
       echo "$PIDFILE does not exist, process is not running" 
     else 
       echo "Stopping ..." 
       PID=$(cat $PIDFILE) 
       if [ $REDISPORT -eq 0 ] && [ -n "$REDISSOCKET" ] 
       then 
         $CLIEXEC -s $REDISSOCKET shutdown 
       else 
         $CLIEXEC -p $REDISPORT shutdown 
       fi 
       while [ -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 

. redis-server가 필요한 실행 수준에 추가되면 작동합니다.

그렇지 않으면 sudo /etc/init.d/redis-server stop을 시도하십시오.


참고 : 비슷한 문제는 여기에 해결되었다 : https://groups.google.com/forum/#!topic/redis-db/o-fC_B-fjPs