Bagaimana saya bisa menghentikan redis-server?

335

Saya tampaknya memiliki redis-serverinstance berjalan karena ketika saya mencoba memulai server baru dengan memasukkan redis-server, saya disambut dengan yang berikut:

Opening port: bind: Address already in use

Saya tidak tahu cara menghentikan server ini dan memulai yang baru.

Apakah ada perintah yang bisa saya tambahkan redis-serverketika saya mengetik CLI?

OS saya adalah Ubuntu 10,04.

Qcom
sumber
OS dan distribusi mana yang Anda gunakan?
yojimbo87
Hadirin sekalian, jika Anda tidak menginstal redis melalui manajer paket, dan Anda menginstalnya dari source, maka itu mungkin tidak bekerja dengan systemv atau pemula atau systemd di ubuntu. Dengan demikian, jawaban yang dipilih tidak akan berfungsi secara default. Jawaban kedua, yang tidak ditandai dengan benar, tampaknya lebih dapat diandalkan.
Donato
Tip: menguji apakah server Redis sedang berjalan dapat dilakukan melalui redis-cli ping. Server Redis yang berjalan akan merespons PONG.
Jochem Schulenklopper

Jawaban:

555

Baik terhubung ke instance simpul dan gunakan perintah shutdown atau jika Anda berada di ubuntu Anda dapat mencoba me-restart server redis melalui init.d:

/etc/init.d/redis-server restart

atau hentikan / mulai:

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

Di Mac

redis-cli shutdown
yojimbo87
sumber
5
Anda hanya dapat melakukannya jika Anda mengatur redis dengan cara itu. Jawaban Kevin McTigue bekerja dengan pengaturan minimal.
btk
1
Pada OS X Anda mungkin harus menggunakan launchctluntuk melakukan ini, dan pada sistem lain, systemctlatau service.
tadman
1
Pada beberapa mesin, sudo /etc/init.d/redis berhenti akan berfungsi
TroodoN-Mike
4
Di Ubuntu modern, saya hanya menggunakan service redis-server stopdan service redis-server start, setelah menginstalnya dengan apt-get install redis-server.
Cloud Artisans
1
Ini hanya berfungsi jika Anda memiliki redis-server berjalan sebagai layanan. Jika ini dijalankan sebagai eksekusi yang berdiri sendiri, maka Anda harus menghentikan proses secara eksplisit. Berikut adalah langkah-langkah yang saya gunakan untuk menghentikan proses: pkill redis-server pada kotak linux
199

Cara yang lebih bersih dan lebih andal adalah masuk ke redis-cli lalu ketik shutdown

Di redis-cli, ketik help @serverdan Anda akan melihat ini di dekat bagian bawah daftar:

SHUTDOWN - ringkasan: Menyimpan dataset secara sinkron ke disk dan kemudian mematikan server sejak: 0,07

Dan jika Anda memiliki instance redis-server berjalan di terminal, Anda akan melihat ini:

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...
Kevin McTigue
sumber
73
Atau bahkan tidak memulai redis-cli. Kirimkan saja dari baris perintah via redis-cli shutdown. (Anda dapat mengirim perintah seperti ini, misalnya redis-cli set cat dog; redis-cli get cat)
JesseBuesking
6
Satu-satunya peringatan untuk komentar @ jessebuesking adalah bahwa jika Anda telah mengatur perlindungan kata sandi, redis-cli set cat dog; redis-cli get catperubahan redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat, yang dapat mengganggu setelah beberapa perintah.
glarrain
@glarrain satu hal yang bisa Anda lakukan untuk menghindari redundansi adalah mengatur alias untuk sesi bash Anda saat ini, misalnya alias redis-cli="redis-cli -a mypassword". Dengan cara ini Anda dapat membuat panggilan seperti di komentar asli saya tanpa harus memasok kembali kata sandi Anda pada setiap penggunaan.
JesseBuesking
@ jessebuesking sangat kreatif! Tidak akan memikirkan solusi. Untuk beberapa alasan saya agak takut memasukkan kata sandi dalam file konfigurasi
glarrain
@ glarrain tidak mengambil kata-kata saya untuk itu, tapi saya pikir melakukan ini hanya akan menyimpannya di memori untuk sesi saat ini (alias tidak menambahkannya ke bashrc atau bash_profile Anda, masukkan saja apa adanya dari prompt Anda).
JesseBuesking
141

redis-cli shutdownpaling efektif. Jawaban yang diterima tidak bekerja untuk saya (OSX Lion). Terima kasih, @JesseBuesking.

SimplGy
sumber
ya, jawaban yang diterima hanya berfungsi untuk sistem Linux dengan Redis ditetapkan sebagai layanan dengan cara yang digambarkan
glarrain
2
Ini juga berfungsi pada Windows. redis-cli.exe shutdown
Brandon Boone
Seperti yang saya sebutkan di atas, sangat disayangkan bahwa metode (agak jelas) ini sangat sulit ditemukan. Saya berharap itu redis-cli --helpbisa menutupi kasus ini.
Jochem Schulenklopper
42

Untuk OSX, saya membuat alias berikut untuk memulai dan menghentikan redis(diinstal dengan Homebrew):

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

Ini bekerja sangat baik untuk pengembangan lokal!

Homebrew sekarang memiliki homebrew-servicesyang dapat digunakan untuk memulai, menghentikan dan memulai kembali layanan. layanan homebrew

brew services diinstal secara otomatis saat dijalankan.

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

Jika Anda menggunakan run, maka itu tidak akan memulainya saat masuk (atau boot). startakan memulai redislayanan dan menambahkannya saat masuk dan boot.

Ray Hunter
sumber
3
Jika Anda menginstal redis menggunakan homebrew, brew services stop redisjuga berfungsi! :)
Edouard Berthe
Saya akan merekomendasikan menggunakan layanan minuman sekarang untuk menangani awal dan berhenti untuk default. Jika Anda perlu sedikit lebih banyak kontrol maka ada juga opsi lain.
Ray Hunter
1
Ini adalah jawaban terbaik karena berfungsi pada semua rasa dan mac linux, termasuk yang diinstal menggunakan apt, yum, brew, atau mengunduh. Apakah mereka memiliki skrip pemula atau init atau sistem atau tidak. Terima kasih
doesnt_matter
1
Saya suka nama alias :) Keren!
thinklinux
1
apa yang harus saya lakukan jika saya ingin memulai kembali dan tidak mematikan @RayHunter
AATHITH RAJENDRAN
25

Ketik SHUTDOWNCLI

atau

jika Anda tidak peduli dengan data Anda dalam memori, Anda juga dapat mengetik SHUTDOWN NOSAVEuntuk mematikan server secara paksa.

pengguna1651082
sumber
16

Coba killall redis-server. Anda juga dapat menggunakan ps auxuntuk menemukan nama dan pid dari server Anda, dan kemudian membunuhnya kill -9 here_pid_number.

ciembor
sumber
Ini bagus, bekerja di mac / unix. (Mac diuji, unix disetujui)
ThomasReggi
24
Gagasan buruk untuk mematikan server DB. Selalu lebih suka shutdown yang tepat, atau setidaknya, bunuh -15 daripada kill -9.
Zsolt Szilagyi
2
@ZsoltSzilagy Anda harus memberikan tautan atau sedikit penjelasan mengapa itu ide yang buruk. Seperti bagaimana redis tidak menulis tertunda, sehingga masih akan ada data yang tidak berkomitmen dalam memori.
notbad.jpeg
5
@ notbad.jpeg, tentu saja, Anda juga bisa menjatuhkan komputer ke lantai. Jika tabelnya cukup tinggi, ini juga harus menghentikan server. Apakah saya memerlukan tautan atau sedikit penjelasan mengapa ini adalah ide yang buruk?
Osa
2
Dengan metode ini Anda tidak memikirkan status basis data redis. Anda menggunakan fungsionalitas OS untuk mematikan aplikasi alih-alih menggunakan aplikasi itu sendiri atau daemon, yang mungkin menggunakan fungsionalitas aplikasi juga. Solusi ini seperti mencabut kabel untuk mematikan TV.
Yesus
15

Opsi 1: pergi ke redis direktori instalasi dan arahkan ke src, dalam kasus saya:

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

di mana 6379 adalah port default.

Opsi 2: cari proses redis dan bunuh

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

Dan kemudian mulai membunuh:

kill -9 22292

kill -9 22299

Saya menggunakan Centos 6.7, x86_64

semoga membantu

Aplikasi Kerja
sumber
12

hentikan tipe server redis di terminal dengan pengguna root

sudo service redis-server stop

pesan akan ditampilkan setelah menghentikan redis-server

Stopping redis-server: redis-server.

jika Anda ingin memulai jenis redis-server

sudo service redis-server start

jika Anda ingin me-restart jenis server

sudo service redis-server restart
denny
sumber
Saya ingin tahu apakah ini masih berlaku untuk versi Redis baru jika dikonfigurasi secara default. Penerbitan service --status-alltidak akan menunjukkan redis, maka serviceperintah apa pun akan gagal redis-server. Tapi redis memang muncul ps -ef. Saya tidak dapat menemukan dokumen terkait.
themefield
Tampak di Ubuntu 18,04 sudo service redis start/stop/statusmelakukan hal yang sama, keduanya pergi.
frmbelz
10

Cara lain bisa jadi:

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

Bekerja pada * NIX & OSX

memukul
sumber
1
@ JonasE, tidak, ini seharusnya bukan jawaban yang diterima IMO. Setelah OS membunuh proses yang berjalan mengabaikan kasus bahwa aplikasi mungkin memiliki beberapa data dalam memori yang belum disimpan ke toko yang lebih persisten. Mematikan aplikasi melalui metode yang disediakan oleh aplikasi lebih disukai merupakan pilihan yang lebih baik.
Jochem Schulenklopper
6

MacOSX - Berhasil :)

Langkah 1: Temukan Redis Server yang Sedang Berjalan

ps auxx | grep redis-server

Langkah 2: Bunuh proses spesifik dengan menemukan PID (ID Proses) - Redis Sever

kill -9 PID
Karthekeyan Devanand
sumber
5

Jika Anda tahu pada port apa ia akan berjalan (secara default akan menjadi 6379), Anda dapat menggunakan perintah di bawah ini untuk mendapatkan pid dari proses menggunakan port itu dan kemudian dapat menjalankan perintah kill untuk pid yang sama.

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

perintah di atas akan memberi Anda pid.

bunuh <pid>;

Ini akan mematikan server Anda.

cptjack
sumber
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
Adobe
sumber
5

Biasanya masalah ini muncul setelah saya mematikan komputer saya (atau membiarkannya berjalan) dengan cara yang tidak teratur .. Saya percaya port macet terbuka, sementara proses berhenti tetapi terus terikat ke port sebelumnya.

9/10 kali perbaikannya bisa:

$ ps aux | grep redis

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

$ kill 2976

$ redis-server

Baik untuk pergi.

SerKnight
sumber
3

Dalam kasus saya itu adalah:

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

Untuk mengetahui apa nama layanan Anda, Anda dapat menjalankan:

sudo updatedb
locate redis

Dan itu akan menunjukkan kepada Anda setiap file Redis di sistem Anda.

joan16v
sumber
3

jika Anda melakukan instal (mis. ubuntu) saat menginstal redis maka Anda dapat melakukannya:

redis-cli shutdown

seperti yang ditunjukkan oleh @ yojimbo87 :)

gia huy
sumber
2

Cara lain bisa jadi:

brew services stop redis
Ihor Pavlyk
sumber
+10 untuk ini, ia bekerja tanpa permintaan maaf di mac! ini juga berfungsi ™ layanan minuman mulai redis ™ ¢ layanan minuman mulai ulang redis ¢
Victor.Uduak
2

Mengikuti bekerja untuk saya di MAC

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

Jika Anda menjalankan redis dalam wadah buruh pelabuhan, tidak ada jawaban saat ini yang akan membantu. Anda harus menghentikan wadah redis. Jika tidak, proses redis akan terus respawning.

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

$ docker stop e1c008ab04a2
e1c008ab04a2
Wladek Surala
sumber
2

Jika Anda tahu di port mana (default: 6379) server redis Anda berjalan, Anda bisa pergi dengan opsi 1 atau Anda dapat memeriksa proses redis Anda dan Anda dapat membunuh dengan opsi 2

opsi 1:
Matikan proses pada port:

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

opsi 2:
Temukan Server Redis yang sebelumnya Berjalan:

 ps auxx | grep redis-server

Bunuh proses spesifik dengan menemukan PID (ID Proses) - Redis Sever

kill -9 PID

Sekarang mulai server redis Anda dengan

redis-server /path/to/redis.conf 
AATHITH RAJENDRAN
sumber
1

Saya tidak tahu secara khusus untuk redis, tetapi untuk server secara umum:

OS atau distribusi apa? Seringkali akan ada perintah stop atau /etc/init.d / ... yang akan dapat mencari pid yang ada dalam file pid.

Anda dapat melihat proses apa yang sudah terikat ke port dengan sudo netstat -nlpt(opsi linux; rasa netstat lainnya akan bervariasi) dan memberi sinyal untuk berhenti. Saya tidak akan menggunakan kill -9server yang sedang berjalan kecuali benar-benar tidak ada sinyal atau metode lain untuk mematikannya.

ysth
sumber
1

Perintah di bawah ini berfungsi untuk saya di Server Ubuntu

$ service /etc/init.d/redis_6379 stop
$ service /etc/init.d/redis_6379 start
$ service /etc/init.d/redis_6379 restart
efkan
sumber
0

Di MacOSX,

Inilah yang bekerja untuk saya

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start
tsuz
sumber
0

Satu hal untuk memeriksa apakah perintah redis tidak berfungsi untuk Anda adalah apakah redis-server.pid Anda benar-benar dibuat. Anda menentukan lokasi di mana file ini berada

/etc/systemd/system/redis.service 

dan itu harus memiliki bagian yang terlihat seperti ini:

[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

Periksa lokasi dan izin direktori PIDFile (dalam kasus saya, '/ run / redis'). Saya mencoba memulai kembali layanan yang masuk sebagai penerapan tetapi izin direktori terdaftar sebagai

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

Jika Anda memerlukan penyegaran pada izin linux, lihat ini . Tapi masalahnya adalah saya sedang menjalankan restart karena pengguna saya menyebarkan yang izin di atas adalah rx, tidak memungkinkan pengguna saya untuk menulis ke direktori PIDFile.

Setelah saya sadari, saya login menggunakan root, mengulang perintah restart pada redis ( service redis restart) dan semuanya bekerja. Itu sakit kepala tapi mudah-mudahan ini menghemat waktu seseorang.

Lauren Marie Lahm
sumber
0

Redis memiliki parameter konfigurasi pidfile(mis. /Etc/redis.conf - periksa kode sumber redis ), misalnya:

# 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

Jika sudah disetel atau bisa disetel, alih-alih mencari proses id (pid) dengan menggunakan ps + grepsesuatu seperti ini bisa digunakan:

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

Jika diperlukan, seseorang dapat membuat skrip berhenti redis seperti ini ( skrip default redis 5.0 init.d diadaptasi dalam kode sumber 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
Robert Lujo
sumber