Redis sunucusunu nasıl durdurabilirim?


335

Görünüşe göre redis-serverçalışan bir örneğim var, çünkü girerek yeni bir sunucu başlatmaya çalıştığımda redis-server, aşağıdakilerle karşılaşıyorum:

Opening port: bind: Address already in use

Bu sunucuyu nasıl durduracağımı ve yeni bir sunucuyu nasıl başlatacağımı anlayamıyorum.

redis-serverCLI yazarken ekleyebileceğim herhangi bir komut var mı ?

İşletim sistemim Ubuntu 10.04.


Hangi işletim sistemini ve dağıtımı kullanıyorsunuz?
yojimbo87

Bayanlar ve baylar, paket yöneticisi aracılığıyla redis yüklemediyseniz ve kaynaktan yüklediyseniz, ubuntu üzerinde systemv veya upstart veya systemd ile çalışmayabilir. Bu nedenle, seçilen cevap varsayılan olarak çalışmaz. Doğru işaretlenmemiş ikinci cevap daha güvenilir görünüyor.
Donato

İpucu: Bir Redis sunucusunun çalışıp çalışmadığını test etmek için redis-cli ping. Çalışan bir Redis sunucusu yanıt verecektir PONG.
Jochem Schulenklopper

Yanıtlar:


555

Düğüm örneğine bağlanın ve shutdown komutunu kullanın veya ubuntu'daysanız redis sunucusunu init.d üzerinden yeniden başlatmayı deneyebilirsiniz:

/etc/init.d/redis-server restart

veya durdur / başlat:

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

Mac'te

redis-cli shutdown

5
Bunu yalnızca redis'i bu şekilde ayarladıysanız yapabilirsiniz. Kevin McTigue'nin cevabı minimum kurulumla çalışır.
btk

1
OS X'te muhtemelen launchctlbunu yapmak için kullanmanız gerekecek ve diğer sistemlerde systemctlveya service.
tadman

1
Bazı makinelerde sudo /etc/init.d/redis durağı çalışacak
TroodoN-Mike

4
Modern Ubuntu'da, sadece kullandım service redis-server stopve service redis-server startkurduktan sonra apt-get install redis-server.
Cloud Artisans

1
Bu yalnızca redis-sunucusu bir hizmet olarak çalışıyorsa çalışır. Tek başına yürütülebilir bir dosya olarak çalışıyorsa, işlemi açıkça durdurmanız gerekir. İşte işlemi durdurmak için kullandığım adımlar: Linux kutusunda pkill redis-server

199

Daha temiz, daha güvenilir bir yol, redis-cli'ye girip shutdown

Redis-cli yazın help @serverve bunu listenin altına yakın bir yerde görürsünüz:

SHUTDOWN - özet: Veri kümesini eşzamanlı olarak diske kaydedin ve sonra sunucuyu kapatın: 0.07

Terminalde çalışan bir redis sunucusu örneğiniz varsa, şunu görürsünüz:

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
Ya da redis-cli'ya başlama. Sadece komut satırından yoluyla gönderin redis-cli shutdown. (örneğin, böyle bir komut gönderebilirsiniz redis-cli set cat dog; redis-cli get cat)
JesseBuesking

6
@Jessebuesking yorumu için tek uyarı, şifre koruması ayarladıysanız , birkaç komuttan sonra can sıkıcı olabilecek redis-cli set cat dog; redis-cli get catdeğişiklikler redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat.
glarrain

@glarrain artıklıktan kaçınmak için yapabileceğiniz bir şey, mevcut bash oturumunuz için bir takma ad ayarlamaktır alias redis-cli="redis-cli -a mypassword". Bu şekilde, her kullanımda şifrenizi tekrar girmenize gerek kalmadan orijinal yorumumdaki gibi arama yapabilirsiniz.
JesseBuesking

@jessebuesking çok yaratıcı! Çözümü düşünmezdim. Nedense yapılandırma dosyalarına şifre koymaktan biraz korkuyorum
glarrain

@glarrain bunun için söz yapmayız, ama ben düşünüyorum sadece geçerli oturum (aka sizin istemi den olduğu gibi sadece girin, bashrc veya bash_profile eklemek gerekmez) için hafızada depolar yapıyor.
JesseBuesking

141

redis-cli shutdownen etkilidir. Kabul edilen cevap benim için çalışmıyor (OSX Lion). Teşekkürler @JesseBuesking.


evet, kabul edilen cevap sadece
Redis'in

2
Bu aynı zamanda Windows üzerinde de çalışır. redis-cli.exe shutdown
Brandon Boone

Yukarıda bahsettiğim gibi, bu (oldukça açık) yöntemin bulunması çok zor. Bunun redis-cli --helpbu davayı ele almasını bekliyordum .
Jochem Schulenklopper

42

OSX için, başlatma ve durdurma redis(Homebrew ile yüklü) için aşağıdaki takma adları oluşturdum :

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

Bu yerel kalkınma için harika çalıştı!

Homebrew şimdi homebrew-serviceshizmetleri başlatmak, durdurmak ve yeniden başlatmak için kullanılabilir. homebrewleri-hizmetler

brew services çalıştırıldığında otomatik olarak kurulur.

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

Kullanırsanız run, girişte (veya önyüklemede) başlatmaz. hizmeti startbaşlatır redisve giriş ve önyüklemede ekler.


3
Eğer homebrew kullanarak redis yüklediyseniz, brew services stop redisaynı zamanda işe yarıyor! :)
Edouard Berthe

Demleme servislerinin varsayılanların başlatılması ve durdurulması için kullanılmasını tavsiye ederim . Biraz daha fazla kontrole ihtiyacınız varsa, başka seçenekler de vardır.
Ray Hunter

1
Bu, apt, yum, demlemek veya indirme kullanılarak yüklenenler de dahil olmak üzere tüm linux lezzetleri ve mac üzerinde çalıştığı için en iyi cevaptır. İster başlangıç, ister başlangıç, ister sistem d betikleri olsun veya olmasın. Teşekkürler
doesnt_matter

1
Takma adların adını seviyorum :) Güzel!
thinklinux

1
yeniden başlatmak ve kapatmak istemiyorsam ne yapmalıyım @RayHunter
AATHITH RAJENDRAN

25

Tür SHUTDOWNCLI

veya

bellekteki verilerinizle ilgilenmiyorsanız SHUTDOWN NOSAVE, sunucuyu kapatmaya zorlamak için de yazabilirsiniz .


16

Deneyin killall redis-server. Ayrıca kullanabilir ps auxisim bulmak için ve sunucu pid ve sonra onu öldürmek kill -9 here_pid_number.


Bu harika, mac / unix üzerinde çalışıyor. (Mac test edildi, unix onaylandı)
ThomasReggi

24
Bir DB sunucusunu zor öldürmek için kötü fikir. Her zaman uygun bir kapatma tercih edin ya da en azından -9 yerine -15'i öldürün.
Zsolt Szilagyi

2
@ZsoltSzilagy neden kötü bir fikir olduğunu bir bağlantı ya da bir açıklama sağlamalıdır . Redis'in yazma işlemlerini nasıl geciktirdiği gibi, bellekte hala bozulmamış veriler olacaktır.
notbad.jpeg

5
@ notbad.jpeg, elbette, bilgisayarınızı yere de bırakabilirsiniz. Tablo yeterince yüksekse, sunucuyu da durdurmalıdır. Bunun neden kötü bir fikir olduğuna dair bir bağlantıya veya biraz açıklamaya ihtiyacım var mı?
osa

2
Bu yöntemle redis veritabanı durumunu düşünmüyorsunuz. Uygulamanın kendisini veya bir arka plan programını kullanmak yerine bir uygulamayı kapatmak için bir işletim sistemi işlevi kullanıyorsunuz; bu da muhtemelen uygulama işlevselliğini kullanıyor. Bu çözüm, TV'yi kapatmak için kabloyu çıkarmak gibidir.
İsa

15

Seçenek 1: Kurulum dizinini yeniden yönlendir srcve benim durumumda şuraya git :

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

burada 6379 varsayılan bağlantı noktasıdır.

2.Seçenek: Redis işlemini bulun ve öldür

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

Ve sonra öldürmeyi başlatın:

kill -9 22292

kill -9 22299

Centos 6.7, x86_64 kullanıyorum

Umarım yardımcı olur


12

terminaldeki redis sunucusu türünü root kullanıcısı ile durdurma

sudo service redis-server stop

redis-server durdurulduktan sonra mesaj görüntülenecektir

Stopping redis-server: redis-server.

redis-sunucu tipini başlatmak istiyorsanız

sudo service redis-server start

sunucu türünü yeniden başlatmak istiyorsanız

sudo service redis-server restart

Varsayılan olarak yapılandırılmışsa, bunun yeni Redis sürümleri için hala geçerli olup olmadığını merak ediyorum. Düzenleyen service --status-allREDIS göstermez, dolayısıyla herhangi bir servicekomut karşı başarısız olur redis-server. Ama redis ortaya çıkıyor ps -ef. İlgili herhangi bir belge bulamıyorum.
themefield

Ubuntu 18.04'te sudo service redis start/stop/statusaynı şeyi yapıyor, ikisi de gidiyor.
frmbelz

10

Başka bir yol olabilir:

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

* NIX ve OSX üzerinde çalışır


1
@JoenasE, hayır, bu kabul edilen cevap IMO olmamalı. İşletim sisteminin çalışan bir işlemi öldürmesi, uygulamanın bellekteki bazı verilerin henüz daha kalıcı bir depoya kaydedilmemiş olması olasılığını ortadan kaldırır. Uygulamanın uygulama tarafından sağlanan bir yöntemle kapatılması tercihen daha iyi bir seçenektir.
Jochem Schulenklopper

6

MacOSX - Çalıştı :)

Adım 1: Önceden Çalışan Redis Sunucusunu bulun

ps auxx | grep redis-server

Adım 2: PID (İşlem Kimliği) bularak belirli bir işlemi öldürün - Redis Sever

kill -9 PID

5

Hangi bağlantı noktasını çalıştıracağını biliyorsanız (varsayılan olarak 6379 olurdu), bu bağlantı noktasını kullanarak işlemin pid'ini almak için aşağıdaki komutu kullanabilirsiniz ve sonra aynı pid için kill komutunu çalıştırabilirsiniz.

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

Yukarıdaki komut size pid verecektir.

öldürmek <pid>;

Bu sunucunuzu kapatır.


5

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

5

Genellikle bu sorun, bilgisayarımı kapattıktan (veya çalışmayı bırakarak) düzensiz bir şekilde kapattıktan sonra ortaya çıkıyor .. İşlem dururken ancak önceki bağlantı noktasına bağlı kalmaya devam ederken bağlantı noktasının sıkışıp kaldığına inanıyorum.

Düzeltmenin 9/10 katı olabilir:

$ ps aux | grep redis

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

$ kill 2976

$ redis-server

Gitmek güzel.


3

Benim durumumda:

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

Hizmet adınızın ne olduğunu bulmak için şunu çalıştırabilirsiniz:

sudo updatedb
locate redis

Ve sisteminizdeki tüm Redis dosyalarını gösterecektir.


3

Eğer eğer make install yükleme sırasında (örneğin ubuntu) REDIS o zaman yapabilirsiniz:

redis-cli shutdown

@ yojimbo87 tarafından işaret edildiği gibi :)


2

Başka bir yol olabilir:

brew services stop redis

Bunun için +10, mac'ta özür olmadan çalışır! Bu aynı zamanda çalışır ™ demlemek hizmetleri start redis ™ ¢ demlemek hizmetleri yeniden başlatma redis ¢
Victor.Uduak

2

Aşağıdaki MAC benim için çalıştı

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

2

Docker kapsayıcısında redis çalıştırıyorsanız, mevcut yanıtların hiçbiri yardımcı olmaz. Yeniden kapsayıcıyı durdurmanız gerekir. Aksi takdirde, yeniden işleme süreci yeniden doğmaya devam edecektir.

$ 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 sunucunuzun hangi bağlantı noktasında (varsayılan: 6379) çalıştığını biliyorsanız, seçenek 1 ile gidebilir veya redis işleminizi kontrol edebilir ve seçenek 2 ile öldürebilirsiniz

seçenek 1:
Bağlantı noktasında işlemi sonlandır:

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

seçenek 2:
Önceden Çalışan Redis Sunucusunu bulun:

 ps auxx | grep redis-server

PID (İşlem Kimliği) bularak belirli bir süreci öldürün - Redis Sever

kill -9 PID

Şimdi redis sunucunuzu

redis-server /path/to/redis.conf 

1

Ben özellikle redis için bilmiyorum, ama genel olarak sunucular için:

Hangi işletim sistemi veya dağıtım? Genellikle bir pid dosyasındaki mevcut pid'i arayabilecek bir stop veya /etc/init.d / ... komutu olacaktır.

Limana hangi işlemin zaten bağlı olduğunu sudo netstat -nlpt(linux seçenekleri; diğer netstat lezzetleri değişecektir) arayabilir ve durma sinyalini verebilirsiniz. Ben ediyorum değil kullanmak kill -9gerçekten başka sinyali veya kapatmaya yöntem olmadığı sürece çalışan bir sunucuda.


1

Aşağıdaki komutlar Ubuntu Sunucusunda benim için çalışıyor

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

0

MacOSX'te,

Bu benim için işe yaradı

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

0

Redis komutlarının işinize yarayıp yaramadığını kontrol etmeniz gereken bir şey, redis-server.pid dosyanızın gerçekten oluşturulup oluşturulmadığıdır. Bu dosyanın bulunduğu yeri belirtirsiniz

/etc/systemd/system/redis.service 

ve şuna benzer bir bölüm olmalıdır:

[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 dizininin konumunu ve izinlerini kontrol edin (benim durumumda '/ run / redis'). Dağıtım olarak oturum açmış olan hizmeti yeniden başlatmaya çalışıyordum ancak dizin izinleri

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

Linux izinleri hakkında bilgi tazeleme ihtiyacınız varsa, bunu kontrol edin . Ama sorun benim yeniden kullanıcısı PIDFile dizinine yazma izin vermedi rx olan benim dağıtım kullanıcı olarak yeniden başlatma yürütüyordu oldu.

Bunu fark ettikten sonra, root kullanarak giriş yaptım, redis ( service redis restart) üzerindeki restart komutunu yeniden düzenledim ve her şey çalıştı. Bu bir baş ağrısıydı ama umarım bu biraz zaman kazandırır.


0

Redis, yapılandırma parametresine sahiptir pidfile(örneğin /etc/redis.conf - redis kaynak kodunu kontrol edin ), örneğin:

# 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

Ayarlanmış veya ayarlanmışsa, ps + grepböyle bir şey kullanarak işlem kimliği (pid) aramak yerine kullanılabilir:

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

Gerekirse, redis komut dosyasını şu şekilde yapabilir (uyarlanmış varsayılan redis 5.0 init.d komut dosyası redis kaynak kodunda ):

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.