Как я могу остановить редис-сервер?

У меня видимо есть redis-server экземпляр работает, потому что, когда я пытаюсь запустить новый сервер, введя redis-serverЯ приветствую следующее:

Opening port: bind: Address already in use

Я не могу понять, как остановить этот сервер и запустить новый.

Могу ли я добавить команду? redis-server когда я набираю в CLI?

Моя ОС - Ubuntu 10.04.

30 ответов

Решение

Либо подключитесь к экземпляру узла и используйте команду shutdown, либо, если вы используете Ubuntu, вы можете попытаться перезапустить Redis-сервер через init.d:

/etc/init.d/redis-server restart

или остановите / запустите это:

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

На Mac

redis-cli shutdown

Более чистый и надежный способ - войти в Redis-Cli и затем набрать shutdown

В redis-cli введите help @server и вы увидите это в нижней части списка:

SHUTDOWN - сводка: синхронно сохраните набор данных на диск и затем завершите работу сервера, так как: 0.07

И если у вас есть экземпляр redis-сервера, работающий в терминале, вы увидите это:

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...

redis-cli shutdown является наиболее эффективным. Принятый ответ не работает для меня (OSX Lion). Спасибо, @JesseBuesking.

Для OSX я создал следующие псевдонимы для запуска и остановки Redis (Redis установлен с homebrew):

alias redstart='redis-server /usr/local/etc/redis/6379.conf'

alias redstop='redis-cli -h 127.0.0.1 -p 6379 shutdown'

Это отлично сработало для меня для местного развития.

Остановите тип сервера redis в терминале с пользователем root

sudo service redis-server stop

сообщение будет отображаться после остановки редис-сервера

Stopping redis-server: redis-server.

если вы хотите запустить тип сервера redis

sudo service redis-server start

если вы хотите перезагрузить тип сервера

sudo service redis-server restart

Тип SHUTDOWN в CLI

или же

если вы не заботитесь о своих данных в памяти, вы также можете набрать SHUTDOWN NOSAVE принудительно отключить сервер.

Я бы предложил отключить Redis-server, который предотвращает автоматический запуск при перезагрузке компьютера и очень полезно использовать такие инструменты, как докеры и т. Д.

Шаг 1. Остановите redis-сервер

      sudo service redis-server stop

Шаг 2. Отключите redis-сервер

      sudo systemctl disable redis-server

если вам нужен Redis, вы можете запустить его как:

      sudo service redis-server start

Пытаться killall redis-server, Вы также можете использовать ps aux чтобы найти имя и pid вашего сервера, а затем убить его kill -9 here_pid_number,

Вариант 1: перейдите в каталог установки Redis и перейдите к src, в моем случае:

/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

Надеюсь, поможет

Если вы сделали установку (например, ubuntu) при установке Redis, вы можете сделать:

redis-cli shutdown

как указано @yojimbo87:)

Другой способ может быть:

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

Работает на *NIX & OSX

MacOSX - это сработало:)

Шаг 1: Найти ранее запущенный Redis Server

ps auxx | grep redis-server

Шаг 2. Завершите определенный процесс, найдя PID (идентификатор процесса) - Redis Sever

kill -9 PID

Если Redis установлен с помощью оснастки:

      sudo snap stop redis.server

Другой способ может быть:

brew services stop redis

systemd, Ubuntu 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

Обычно эта проблема возникает после того, как я нерегулярно выключаю свой компьютер (или оставляю работающим). Я считаю, что порт застревает открытым, в то время как процесс останавливается, но продолжает привязываться к предыдущему порту.

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

Хорошо пойти.

Если вы знаете, на каком порту (по умолчанию:6379) работает ваш сервер 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 

Если вы знаете, на каком порту он будет работать (по умолчанию это будет 6379), вы можете использовать приведенную ниже команду, чтобы получить pid процесса, использующего этот порт, а затем выполнить команду kill для того же pid.

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

вышеуказанная команда даст вам pid.

убийство <pid>;

Это отключит ваш сервер.

Если вы запускаете Redis в Docker-контейнере, ни один из настоящих ответов не поможет. Вы должны остановить контейнер 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

Следующее работало у меня на MAC

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

В моем случае это было:

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

Чтобы узнать, как называется ваша служба, вы можете запустить:

sudo updatedb
locate redis

И он покажет вам все файлы Redis в вашей системе.

Чтобы остановить сервер Redis

sudo service redis-serve stop

Команды ниже работают для меня на сервере Ubuntu

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

Я не знаю конкретно для Redis, но для серверов в целом:

Какая ОС или дистрибутив? Часто будет команда stop или /etc/init.d/..., которая сможет найти существующий pid в файле pid.

Вы можете посмотреть, какой процесс уже связан с портом sudo netstat -nlpt (параметры linux; другие варианты netstat могут отличаться) и сигнализируют об этом. Я бы не использовал kill -9 на работающем сервере, если на самом деле нет другого сигнала или метода для его выключения.

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

Если он установлен или может быть установлен, вместо поиска идентификатора процесса (pid) с помощью ps + grep можно было бы использовать что-то вроде этого:

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

При необходимости можно сделать такой скрипт остановки redis (адаптированный скрипт redis 5.0 init.d по умолчанию в исходном коде redis):

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

Имя службы Redisredis-server, поэтому вы можете отключить и остановить Redis с помощью этой команды:

      sudo systemctl disable redis-server 
sudo systemctl stop redis-server 

В MacOSX

Это то, что сработало для меня

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

Одна вещь, чтобы проверить, не работают ли команды 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

Если вам нужно освежить в разрешениях Linux, проверьте это. Но проблема заключалась в том, что я выполнял перезапуск как мой пользователь развертывания, права доступа которого выше, rx, не позволяя моему пользователю писать в каталог PIDFile.

Как только я понял это, я вошел в систему, используя root, повторно введите команду restart на redis (service redis restart) и все заработало. Это была головная боль, но, надеюсь, это сэкономит кому-то немного времени.

Чтобы изящно закрыть определенные экземпляры с помощью паролей и не прибегать к грубой силеkillкоманды, используйте:

redis-cli -p <port> -a <pass> shutdown

      root@machine:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       105  0.1  0.0  60552 10772 ?        Ssl  23:27   0:02 redis-server 127.0.0.1:10002
root       111  0.1  0.0  60552 10900 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10003
root       117  0.1  0.0  60552 10872 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10004

root@machine:~# redis-cli -p 10002 -a mypassword shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

root@machine:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       111  0.1  0.0  60552 10900 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10003
root       117  0.1  0.0  60552 10872 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10004

root@machine:~#

Наличие тонны экземпляров гарантирует написание пакетного сценария, который будет перебирать их все для основного отключения.

Вы можете попробовать этот код:

sudo kill -9 $(ps aux | grep 'redis' | awk '{print $2}')
Другие вопросы по тегам