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

192

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

Opening port: bind: Address already in use

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

Есть ли какая-либо команда, которую я могу добавить в redis-server при вводе в CLI?

Моя ОС - Ubuntu 10.04.

  • 0
    Какую ОС и дистрибутив вы используете?
  • 1
    Ubuntu версия 10.04.
Показать ещё 2 комментария
Теги:
database
redis

17 ответов

255
Лучший ответ

Подключитесь к экземпляру node и используйте команду 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
  • 5
    Вы можете сделать это, только если вы настроите Redis таким образом. Ответ Кевина Мактига работает с минимальной настройкой.
  • 36
    это не работает на Mac
Показать ещё 5 комментариев
167

Более чистый, более надежный способ - перейти в 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...
  • 67
    Или даже не начинайте Redis-Cli. Просто отправьте его из командной строки с помощью redis-cli shutdown . (вы можете отправить любую команду, например, например, redis-cli set cat dog; redis-cli get cat )
  • 5
    Единственное предостережение для комментария @jessebuesking заключается в том, что если вы установили защиту паролем, redis-cli set cat dog; redis-cli get cat изменить redis-cli set cat dog; redis-cli get cat на redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat , который может раздражать после нескольких команд.
Показать ещё 10 комментариев
111

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

  • 0
    да, принятый ответ работает только для систем Linux с Redis, настроенным как служба изображенным способом
  • 1
    Это также работает в Windows. redis-cli.exe shutdown
Показать ещё 1 комментарий
23

Для 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'

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

  • 0
    именно то, что я искал. Спасибо!
  • 3
    Если вы установили redis с помощью homebrew, brew services stop redis также работает! :)
Показать ещё 3 комментария
21

Введите SHUTDOWN в CLI

или

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

14

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

  • 0
    Это здорово, работает на Mac / Unix. (Mac протестирован, одобрен Unix)
  • 19
    Плохая идея жестко убить сервер БД. Всегда предпочитайте правильное отключение или, по крайней мере, убивайте -15 вместо убивать -9.
Показать ещё 3 комментария
11

Вариант 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:

kill -9 22292

kill -9 22299

Я использую Centos 6.7, x86_64

надеюсь, что это поможет

10

Другой способ:

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

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

  • 0
    Это должен быть принятый ответ
  • 0
    @JoenasE, нет, это не должно быть принятым ответом ИМО. То, что ОС уничтожает работающий процесс, игнорирует случай, когда приложение может хранить в памяти некоторые данные, которые еще не сохранены в более постоянном хранилище. Выключение приложения с помощью метода, предоставленного приложением , предпочтительно является лучшим вариантом.
5

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

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

приведенная выше команда даст вам pid.

kill <pid>;

Это остановит ваш сервер.

4

MacOSX - It Worked:)

Шаг 1: найдите ранее запущенный сервер Redis

ps auxx | grep redis-server

Шаг 2: Убейте определенный процесс, найдя PID (идентификатор процесса) - Redis Sever

kill -9 PID
3

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

sudo service redis-server stop

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

Stopping redis-server: redis-server.

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

sudo service redis-server start

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

sudo service redis-server restart
  • 0
    Интересно, это все еще действует для новых версий Redis, если настроено по умолчанию. При запуске service --status-all не будет отображаться redis, поэтому любая команда service не будет работать с redis-server . Но redis отображается в ps -ef . Я просто не могу найти связанный документ.
3

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

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

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

sudo updatedb
locate redis

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

2

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

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

Хорошо.

  • 1
    Просто и сладко. Спасибо!
1

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
1

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

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

В MacOSX,

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

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start
1

Я не знаю специально для redis, но для серверов вообще:

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню