Как я могу остановить редис-сервер?
У меня видимо есть 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
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 в вашей системе.
Команды ниже работают для меня на сервере 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}')