redis-server를 어떻게 중지시킬 수 있습니까?


335

나는 분명히이 redis-server내가 입력하여 새 서버를 시작하려고 할 때 때문에 실행중인 인스턴스를 redis-server, I는 다음과 같이 인사 해요 :

Opening port: bind: Address already in use

이 서버를 중지하고 새 서버를 시작하는 방법을 알 수 없습니다.

redis-serverCLI로 입력 할 때 추가 할 수있는 명령이 있습니까?

내 OS는 Ubuntu 10.04입니다.


어떤 OS와 배포판을 사용하고 있습니까?
yojimbo87

신사 숙녀 여러분, 패키지 관리자를 통해 redis를 설치하지 않고 소스에서 설치 한 경우 systemv 또는 upstart 또는 우분투에서 systemd와 함께 작동하지 않을 수 있습니다. 따라서 선택한 답변은 기본적으로 작동하지 않습니다. 정답으로 표시되지 않은 두 번째 답변이 더 신뢰할 수있는 것으로 보입니다.
Donato

팁 : Redis 서버가 실행 중인지 테스트는을 통해 수행 할 수 있습니다 redis-cli ping. 실행중인 Redis 서버는로 응답합니다 PONG.
Jochem Schulenklopper

답변:


555

노드 인스턴스에 연결하고 shutdown 명령을 사용 하거나 우분투를 사용하는 경우 init.d를 통해 redis 서버를 다시 시작할 수 있습니다.

/etc/init.d/redis-server restart

또는 중지 / 시작하십시오.

/etc/init.d/redis-server stop
/etc/init.d/redis-server start

Mac에서

redis-cli shutdown

5
redis를 설정 한 경우에만 그렇게 할 수 있습니다. Kevin McTigue의 답변은 최소 설정으로 작동합니다.
btk

1
OS X에서는 아마도이 launchctl작업을 수행하고 다른 시스템 systemctl또는 을 사용해야 합니다 service.
tadman

1
일부 시스템에서는 sudo /etc/init.d/redis 중지가 작동합니다
TroodoN-Mike

4
현대 우분투에, 난 그냥 사용 service redis-server stop하고 service redis-server start그것을 설치 한 후, apt-get install redis-server.
Cloud Artisans

1
이것은 redis-server가 서비스로 실행중인 경우에만 작동합니다. 독립형 실행 파일로 실행중인 경우 프로세스를 명시 적으로 중지해야합니다. 프로세스를 중지하는 데 사용한 단계는 다음과 같습니다. Linux 상자의 pkill redis-server

199

더 깨끗하고 신뢰할 수있는 방법은 redis-cli에 들어가서 다음을 입력하는 것입니다. shutdown

redis-cli에 다음을 입력 help @server하면 목록 하단 근처에 다음이 표시됩니다.

SHUTDOWN-summary : 동 기적으로 데이터 세트를 디스크에 저장 한 후 서버를 종료합니다 : 0.07

터미널에서 실행중인 redis-server 인스턴스가있는 경우 다음을 볼 수 있습니다.

User requested shutdown...
[6716] 02 Aug 15:48:44 * Saving the final RDB snapshot before exiting.
[6716] 02 Aug 15:48:44 * DB saved on disk
[6716] 02 Aug 15:48:44 # Redis is now ready to exit, bye bye...

73
또는 redis-cli를 시작하지 마십시오. 명령 줄에서을 통해 보내십시오 redis-cli shutdown. (예를 들어 이와 같은 명령을 보낼 수 있습니다 redis-cli set cat dog; redis-cli get cat)
JesseBuesking

6
@jessebuesking 의견에 대한 유일한주의 사항은 암호 보호를 설정하면로 redis-cli set cat dog; redis-cli get cat변경되어 redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat몇 가지 명령을 수행 한 후에 성 가실 수 있다는 것입니다.
glarrain

@glarrain 중복을 피하기 위해 할 수있는 한 가지는 현재 bash 세션에 대한 별칭을 설정하는 것 alias redis-cli="redis-cli -a mypassword"입니다. 이 방법으로 매번 사용할 때마다 비밀번호를 다시 입력하지 않고도 원래 의견과 같이 전화를 걸 수 있습니다.
JesseBuesking

@jessebuesking 매우 창의적인! 해결책에 대해 생각하지 않았을 것입니다. 어떤 이유로 든 구성 파일에 암호를 넣는 것이 조금 두렵습니다.
glarrain

@glarrain은 내 말을 받아들이지 않지만 현재 세션의 메모리에만 저장 한다고 생각합니다 (일명 bashrc 또는 bash_profile에 추가하지 말고 프롬프트에서 그대로 입력하십시오).
JesseBuesking

141

redis-cli shutdown가장 효과적입니다. 수락 된 답변이 저에게 효과적이지 않습니다 (OSX Lion). 감사합니다, @JesseBuesking.


응, 대답은 묘사 된 방식으로 Redis를 서비스로 설정 한 Linux 시스템에서만 작동한다
glarrain

2
이것은 Windows에서도 작동합니다. redis-cli.exe shutdown
Brandon Boone

위에서 언급했듯이,이 방법은 찾기가 쉽지 않은 것이 유감입니다. 나는 redis-cli --help이 사건을 다룰 수 있다고 기대했다 .
Jochem Schulenklopper

41

OSX의 경우 시작 및 중지 redis(Homebrew와 함께 설치)를 위해 다음과 같은 별칭을 만들었습니다 .

alias redstart='redis-server /usr/local/etc/redis/6379.conf'
alias redstop='redis-cli -h 127.0.0.1 -p 6379 shutdown'

이것은 지역 개발에 큰 도움이되었습니다!

Homebrew는 이제 homebrew-services서비스를 시작, 중지 및 다시 시작하는 데 사용할 수 있습니다. 사제 서비스

brew services 실행될 때 자동으로 설치됩니다.

brew services start|run redis 
brew services stop redis
brew services restart redis

을 사용하면 run로그인시 (또는 부팅시) 시작되지 않습니다. 서비스 start를 시작하고 redis로그인 및 부팅시 추가합니다.


3
homebrew를 사용하여 redis를 설치 한 경우 brew services stop redis에도 작동합니다! :)
Edouard Berthe

기본값의 시작 및 중지를 처리하기 위해 지금 brew 서비스를 사용하는 것이 좋습니다 . 좀 더 제어가 필요한 경우 다른 옵션도 있습니다.
Ray Hunter

1
이것은 apt, yum, brew 또는 download를 사용하여 설치된 것들을 포함하여 모든 리눅스 맛과 Mac에서 작동하기에 가장 좋은 대답입니다. 시작 또는 초기화 또는 시스템 스크립트가 있는지 여부 감사합니다
doest_matter

1
나는 별칭의 이름을 좋아한다 :) 쿨!
thinklinux

1
나는 다시 시작하지 셧다운 @RayHunter하려면 어떻게해야합니까
AATHITH 라 젠드 란

25

SHUTDOWNCLI를 입력 하십시오

또는

메모리에있는 데이터를 신경 쓰지 않으면 SHUTDOWN NOSAVE서버를 강제 종료하도록 입력 할 수도 있습니다 .


16

시도하십시오 killall redis-server. ps aux서버의 이름과 pid를 찾은 다음를 사용하여 서버를 종료 할 수도 있습니다 kill -9 here_pid_number.


이것은 훌륭합니다. mac / unix에서 작동합니다. (맥 테스트, 유닉스 승인)
ThomasReggi

24
DB 서버를 강제 종료하는 것은 좋지 않습니다. 항상 적절한 종료를 선호하거나 적어도 kill -9 대신 kill -15를 사용하십시오.
Zsolt Szilagyi

2
@ ZsoltSzilagy 나쁜 생각 인지 설명 또는 링크를 제공해야합니다 . redis가 쓰기를 지연시키는 방식과 마찬가지로 메모리에 커밋되지 않은 데이터가 여전히 남아 있습니다.
notbad.jpeg

5
@ notbad.jpeg는 물론 컴퓨터를 바닥에 떨어 뜨릴 수도 있습니다. 테이블이 충분히 높으면 서버도 중지해야합니다. 이것이 왜 나쁜 생각인지에 대한 링크 또는 설명이 필요합니까?
osa

2
이 방법을 사용하면 redis 데이터베이스 상태에 대해 생각하지 않습니다. 응용 프로그램 자체 또는 데몬을 사용하는 대신 OS 기능을 사용하여 응용 프로그램을 종료하고 있습니다. 응용 프로그램 기능도 사용하고 있습니다. 이 솔루션은 케이블을 뽑아 TV를 종료하는 것과 같습니다.
예수

15

옵션 1 : src내 경우 redis 설치 디렉토리로 이동하여로 이동하십시오 .

/opt/redis3/src/redis-cli -p 6379 shutdown

여기서 6379는 기본 포트입니다.

옵션 2 : redis 프로세스 찾기 및 종료

ps aux | grep redis-server

t6b3fg   22292  0.0  0.0 106360  1588 pts/0    S+   01:19   0:00 /bin/sh /sbin/service redis start
t6b3fg   22299  0.0  0.0  11340  1200 pts/0    S+   01:19   0:00 /bin/sh /etc/init.d/redis start

그런 다음 킬을 시작하십시오.

kill -9 22292

kill -9 22299

Centos 6.7, x86_64를 사용하고 있습니다.

그것이 도움이되기를 바랍니다


12

루트 사용자로 터미널에서 redis 서버 유형을 중지하십시오.

sudo service redis-server stop

redis-server를 중지하면 메시지가 표시됩니다

Stopping redis-server: redis-server.

redis-server 유형을 시작하려는 경우

sudo service redis-server start

서버 유형을 다시 시작하려는 경우

sudo service redis-server restart

기본적으로 구성된 경우 이것이 새로운 Redis 버전에 여전히 유효한지 궁금합니다. 발행 service --status-all은 redis를 표시하지 않으므로 모든 service명령이에 대해 실패 redis-server합니다. 그러나 redis는에 표시됩니다 ps -ef. 관련 문서를 찾을 수 없습니다.
테마 필드

우분투 18.04 sudo service redis start/stop/status에서도 마찬가지입니다.
frmbelz

10

다른 방법은 다음과 같습니다.

ps -ef | grep -i 'redis-server'
kill -9 PID owned by redis

* NIX & OSX에서 작동


1
@JoenasE, 아니요, 허용되는 답변 IMO가되어서는 안됩니다. OS에서 실행중인 프로세스를 종료하면 응용 프로그램이 메모리에 아직 일부 영구 저장소에 저장되지 않은 일부 데이터가있을 수 있습니다. 응용 프로그램제공하는 방법을 통해 응용 프로그램 종료 하는 것이 더 나은 옵션 인 것이 좋습니다.
Jochem Schulenklopper

6

MacOSX-효과가있었습니다 :)

1 단계 : 이전에 실행중인 Redis 서버 찾기

ps auxx | grep redis-server

2 단계 : PID (프로세스 ID)를 찾아 특정 프로세스 종료-Redis Sever

kill -9 PID

5

실행중인 포트를 알고 있다면 (기본적으로 6379입니다), 아래 명령을 사용하여 해당 포트를 사용하여 프로세스의 pid를 얻은 다음 동일한 pid에 대해 kill 명령을 실행할 수 있습니다.

sudo lsof -i : <port> | awk '{print $2}'

위의 명령은 pid를 제공합니다.

살해 <pid>;

서버가 종료됩니다.


5

시스템, 우분투 16.04 :

$ sudo systemctl is-active redis-server
active

$ sudo systemctl is-enabled redis-server
enabled

$ sudo systemctl disable redis-server
Synchronizing state of redis-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable redis-server
Removed /etc/systemd/system/redis.service.

$ sudo systemctl stop redis-server

5

일반적으로이 문제는 컴퓨터를 종료 한 후 (또는 실행중인 상태에서) 불규칙한 방법으로 발생합니다. 프로세스가 중지되었지만 이전 포트에 계속 바인딩되는 동안 포트가 열린 상태로 고정 된 것으로 생각합니다.

수정 사항의 9/10 배는 다음과 같습니다.

$ ps aux | grep redis

-> MyUser 2976  0.0  0.0  2459704    320   ??  S    Wed01PM   0:29.94 redis-server *:6379

$ kill 2976

$ redis-server

잘가요


3

제 경우에는 다음과 같습니다.

/etc/init.d/redismaster stop
/etc/init.d/redismaster start

서비스 이름이 무엇인지 알아 보려면 다음을 실행하십시오.

sudo updatedb
locate redis

그리고 시스템의 모든 Redis 파일을 보여줍니다.


3

당신이 않은 경우 make가 설치 설치는 동안 (예 : 우분투) 레디 스 당신은 할 수 있습니다 :

redis-cli shutdown

@ yojimbo87이 지적한 대로 :)


2

다른 방법은 다음과 같습니다.

brew services stop redis

+10, Mac에서 사과하지 않고 작동합니다! 이것은 또한 작동합니다 ™ brew 서비스 시작 redis ™ ¢ brew 서비스 재시작 redis ¢
Victor.Uduak

2

다음은 MAC에서 나를 위해 일했습니다.

 ps aux | grep 'redis-server' | awk '{print $2}' | xargs sudo kill -9

2

도커 컨테이너에서 redis를 실행하는 경우 현재 답변이 도움이되지 않습니다. redis 컨테이너를 중지해야합니다. 그렇지 않으면, redis 프로세스는 다시 생성됩니다.

$ docker ps
CONTAINER ID        IMAGE                    PORTS                             
e1c008ab04a2        bitnami/redis:4.0.8-r0   0.0.0.0:6379->6379/tcp

$ docker stop e1c008ab04a2
e1c008ab04a2

2

Redis 서버가 실행중인 포트를 알고 있다면 옵션 1 로 이동 하거나 redis 프로세스를 확인하고 옵션 2로 죽일 수 있습니다

옵션 1 :
포트에서 프로세스 종료 :

check     : sudo lsof -t -i:6379
kill      : sudo kill `sudo lsof -t -i:6379`

옵션 2 :
이전에 실행중인 Redis 서버를 찾으십시오.

 ps auxx | grep redis-server

PID (프로세스 ID)를 찾아 특정 프로세스 종료-Redis Sever

kill -9 PID

이제 Redis 서버를 시작하십시오.

redis-server /path/to/redis.conf 

1

나는 redis를 위해 특별히 모르지만 일반적으로 서버를 위해 :

어떤 OS 또는 배포판? 종종 pid 파일에서 기존 pid를 찾을 수있는 stop 또는 /etc/init.d / ... 명령이 있습니다.

sudo netstat -nlpt(리눅스 옵션; 다른 netstat 특징은 다를 수 있음) 을 사용하여 포트에 이미 바인딩 된 프로세스를 찾아서 중지하도록 신호를 보낼 수 있습니다. 난 것입니다 하지 사용 kill -9정말 다른 신호하거나 종료 할 방법이없는 경우를 제외하고 실행중인 서버에.


1

아래 명령은 Ubuntu Server 에서 작동합니다.

$ service /etc/init.d/redis_6379 stop
$ service /etc/init.d/redis_6379 start
$ service /etc/init.d/redis_6379 restart

0

MacOSX에서

이것이 나를 위해 일한 것입니다

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

0

redis 명령이 작동하지 않는지 확인하는 한 가지 사항은 redis-server.pid가 실제로 생성되고 있는지입니다. 이 파일이있는 위치를 지정합니다

/etc/systemd/system/redis.service 

그리고 다음과 같은 섹션이 있어야합니다.

[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
PIDFile=/run/redis/redis-server.pid
TimeoutStopSec=0
Restart=always

PIDFile 디렉토리의 위치와 권한을 확인하십시오 (필자의 경우 '/ run / redis'). 배포로 로그인 한 서비스를 다시 시작하려고했지만 디렉토리 권한이

drwxrwsr-x  2 redis    redis      40 Jul 20 17:37 redis

리눅스 권한에 대한 리프레셔가 필요하다면 이것을 확인하십시오 . 그러나 문제는 위의 권한이 rx 인 배포 사용자로 다시 시작을 실행하여 사용자가 PIDFile 디렉토리에 쓸 수 없도록하는 것입니다.

일단 내가 루트를 사용하여 로그인하고 redis ( service redis restart) 에서 재시작 명령을 다시 실행하면 모든 것이 작동했습니다. 그것은 두통이지만 희망적으로 이것은 약간의 시간을 절약합니다.


0

Redis에는 구성 매개 변수가 있습니다 pidfile(예 : /etc/redis.conf-redis 소스 코드 확인 ).

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
#
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
#
pidfile /var/run/redis.pid

설정되었거나 설정 가능한 경우 ps + grep다음과 같은 것을 사용하여 프로세스 ID (pid)를 검색하는 대신 다음을 사용할 수 있습니다.

kill $(cat /var/run/redis.pid)

필요한 경우 다음 과 같이 redis 중지 스크립트를 만들 수 있습니다 ( redis 소스 코드의 기본 redis 5.0 init.d 스크립트 적용 ).

PIDFILE=/var/run/redis.pid
if [ ! -f $PIDFILE ]
then
    echo "$PIDFILE does not exist, process is not running"
else
    PID=$(cat $PIDFILE)
    echo "Stopping ..."
    kill $PID
    while [ -x /proc/${PID} ]
    do
        echo "Waiting for Redis to shutdown ..."
        sleep 1
    done
    echo "Redis stopped"
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.