मैं रेडिस-सर्वर को कैसे रोक सकता हूं?


334

मेरे पास जाहिरा तौर पर एक redis-serverउदाहरण है क्योंकि जब मैं प्रवेश करके एक नया सर्वर शुरू करने की कोशिश करता redis-serverहूं, तो मुझे निम्नलिखित के साथ बधाई दी जाती है:

Opening port: bind: Address already in use

मैं यह पता नहीं लगा सकता कि इस सर्वर को कैसे बंद किया जाए और एक नई शुरुआत की जाए।

क्या कोई आदेश redis-serverहै जिसे मैं CLI में टाइप कर सकता हूं?

मेरा OS उबंटू 10.04 है।


आप किस OS और वितरण का उपयोग कर रहे हैं?
yojimbo87

देवियों और सज्जनों, अगर आपने पैकेज मैनेजर के माध्यम से रेडिस स्थापित नहीं किया है, और आपने इसे स्रोत से स्थापित किया है, तो यह ubuntu पर systemv या upstart या systemd के साथ काम नहीं कर सकता है। इस प्रकार, चयनित उत्तर डिफ़ॉल्ट रूप से काम नहीं करेगा। दूसरा उत्तर, जो सही नहीं है, अधिक विश्वसनीय प्रतीत होता है।
डोनटो

युक्ति: यह परीक्षण करना कि Redis सर्वर चल रहा है या नहीं redis-cli ping। एक चल रहे Redis सर्वर के साथ प्रतिक्रिया होगी PONG
जोकेम शुल्नेक्लोपर 15

जवाबों:


554

या तो नोड उदाहरण से कनेक्ट करें और शटडाउन कमांड का उपयोग करें या यदि आप ubuntu पर हैं तो आप init.d के माध्यम से रिडिस सर्वर को पुनः आरंभ करने का प्रयास कर सकते हैं:

/etc/init.d/redis-server restart

या इसे रोकें / शुरू करें:

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

मैक पर

redis-cli shutdown

5
आप केवल इतना ही कर सकते हैं यदि आप इस तरह से रेडिस सेट करते हैं। केविन मैकट्रेग का जवाब न्यूनतम सेटअप के साथ काम करता है।
बीटीके

1
ओएस एक्स पर आपको शायद ऐसा करने के लिए उपयोग launchctlकरना होगा, और अन्य प्रणालियों पर, systemctlया service
tadman

1
कुछ मशीनों पर sudo /etc/init.d/redis stop काम करेगी
TroodoN-Mike

4
आधुनिक उबंटू पर, मैं बस का उपयोग करता हूं service redis-server stopऔर service redis-server startइसे स्थापित करने के बाद apt-get install redis-server
बादल कारीगर

1
यह केवल तभी काम करता है जब आपके पास सर्विस के रूप में रेडिस-सर्वर चल रहा हो। यदि यह एक अकेले निष्पादन योग्य स्टैंड के रूप में चल रहा है, तो आपको प्रक्रिया को स्पष्ट रूप से रोकने की आवश्यकता होगी। यहाँ मैं इस प्रक्रिया को रोकने के लिए इस्तेमाल किए जाने वाले कदम हैं: एक

199

एक क्लीनर, अधिक विश्वसनीय तरीका है रेडिस-क्ली में जाना और फिर टाइप करना shutdown

Redis-cli में, टाइप करें help @serverऔर आप इसे सूची के नीचे देखेंगे:

SHUTDOWN - सारांश: सिंक्रनाइज़ किए गए डेटासेट को डिस्क पर सेव करें और फिर सर्वर को बंद कर दें: 0.07

और यदि आपके पास टर्मिनल में रेडिस-सर्वर इंस्टेंस चल रहा है, तो आप इसे देखेंगे:

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
या फिर redis-cli भी शुरू न करें। बस इसे कमांड लाइन से भेजें redis-cli shutdown। (आप इस तरह से कोई भी आदेश भेज सकते हैं, उदाहरण के लिए redis-cli set cat dog; redis-cli get cat)
जेसीब्यूसकिंग

6
@Jessebuesking टिप्पणी के लिए एकमात्र चेतावनी यह है कि यदि आपने पासवर्ड सुरक्षा स्थापित की है, तो इसमें redis-cli set cat dog; redis-cli get catपरिवर्तन होता है redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat, जो कुछ आदेशों के बाद कष्टप्रद हो सकता है।
२१:२० बजे

@ एक बात आप अतिरेक से बचने के लिए कर सकते हैं, उदाहरण के लिए, अपने वर्तमान बैश सत्र के लिए एक उपनाम सेट है alias redis-cli="redis-cli -a mypassword"। इस तरह आप प्रत्येक उपयोग पर अपने पासवर्ड को फिर से आपूर्ति किए बिना मेरी मूल टिप्पणी में कॉल कर सकते हैं।
जेसिबेस्किंग

@jessebuesking बहुत रचनात्मक! समाधान के बारे में नहीं सोचा होगा। किसी कारण से मुझे कॉन्फिग फाइल में पासवर्ड डालने से थोड़ा डर लगता है
Glarrain

@glarrain इसके लिए मेरा शब्द नहीं लेते हैं, लेकिन मुझे लगता है कि ऐसा करने से यह केवल वर्तमान सत्र के लिए मेमोरी में स्टोर होगा (उर्फ इसे अपने bashrc या bash_profile में न जोड़ें, बस इसे दर्ज करें जैसे कि यह आपके प्रॉम्प्ट से है)।
जेसिबेस्किंग

141

redis-cli shutdownसबसे प्रभावी है। स्वीकृत उत्तर मेरे (OSX शेर) के लिए काम नहीं करता है। धन्यवाद, @JesseBuesking


हां, स्वीकृत उत्तर केवल लिनक्स सिस्टम के लिए काम करता है जिसमें
रेडिस

2
यह भी विंडोज पर काम करता है। redis-cli.exe shutdown
ब्रैंडन बून

जैसा कि मैंने ऊपर उल्लेख किया है, यह अफ़सोस की बात है कि यह (बल्कि स्पष्ट) विधि इतनी मुश्किल है। मुझे उम्मीद थी कि redis-cli --helpइस मामले को कवर किया जा सकता है।
जोकेम शुल्लेनोपॉपर

41

OSX के लिए, मैंने शुरू करने और रोकने के लिए निम्नलिखित उपनाम बनाए redis(Homebrew के साथ स्थापित):

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

इसने स्थानीय विकास के लिए बहुत काम किया है!

Homebrew के पास अब homebrew-servicesसेवाओं को शुरू करने, रोकने और पुनः आरंभ करने के लिए इस्तेमाल किया जा सकता है। homebrew-सेवाओं

brew services स्वचालित रूप से स्थापित होने पर चलाया जाता है।

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

यदि आप उपयोग करते हैं run, तो यह इसे लॉगिन (न ही बूट) पर शुरू नहीं करेगा। सेवा startशुरू करेगा redisऔर इसे लॉगिन और बूट पर जोड़ देगा।


3
यदि आपने होमब्रे का उपयोग करके रेडिस स्थापित किया है, तो brew services stop redisभी काम करता है! :)
एडौर्ड बर्थे

मैं शुरू से निपटने और चूक के लिए रोक के लिए अब काढ़ा सेवाओं का उपयोग करने की सिफारिश करूंगा । यदि आपको थोड़ा और नियंत्रण चाहिए तो अन्य विकल्प भी हैं।
रे हंटर

1
यह सबसे अच्छा जवाब है क्योंकि यह सभी linux flavors और mac पर काम करता है, इसमें apt, yum, brew या download का उपयोग करके इंस्टॉल किया गया है। वेदर में वे अपस्टार्ट या इनिट या सिस्टम डी स्क्रिप्ट हैं या नहीं। धन्यवाद
doesnt_matter

1
मुझे उपनामों का नाम पसंद है :) कूल!
थिंकलिनक्स

1
यदि मैं पुनः आरंभ करना चाहता / चाहती हूं तो मुझे क्या नहीं करना चाहिए @RayHunter
AATHITH RAJENDRAN

25

SHUTDOWNसीएलआई में टाइप करें

या

यदि आपकी स्मृति में आपके डेटा की परवाह नहीं है, तो आप SHUTDOWN NOSAVEसर्वर को बंद करने के लिए बाध्य कर सकते हैं ।


16

कोशिश करो killall redis-server। आप ps auxअपने सर्वर का नाम और पिड खोजने के लिए भी उपयोग कर सकते हैं , और फिर इसे मार सकते हैं kill -9 here_pid_number


यह बहुत अच्छा है, मैक / यूनिक्स पर काम करता है। (मैक परीक्षण, यूनिक्स को मंजूरी दी)
थॉमस डे

24
एक डीबी सर्वर को मुश्किल से मारने का बुरा विचार। हमेशा एक उचित शटडाउन पसंद करते हैं, या कम से कम, मार -15 के बजाय किल -15।
Zsolt Szilagyi

2
@ZsoltSzilagy आपको एक लिंक या कुछ स्पष्टीकरण देना चाहिए कि यह एक बुरा विचार क्यों है। जैसे कि रेडिस लिखने में कैसे देरी करता है, ताकि मेमोरी में अभी भी अनक्मिटेड डेटा होगा।
notbad.jpeg

5
@ notbad.jpeg, निश्चित रूप से, आप अपने कंप्यूटर को फर्श पर गिरा सकते हैं। यदि तालिका काफी अधिक है, तो यह सर्वर को भी रोकना चाहिए। क्या मुझे एक लिंक या कुछ स्पष्टीकरण की आवश्यकता है क्योंकि यह एक बुरा विचार क्यों है?
osa

2
इस पद्धति के साथ आप रेडिस डेटाबेस स्थिति के बारे में नहीं सोच रहे हैं। आप अनुप्रयोग या स्वयं डेमन का उपयोग करने के बजाय किसी एप्लिकेशन को बंद करने के लिए OS कार्यक्षमता का उपयोग कर रहे हैं, जो संभवतः अनुप्रयोग कार्यक्षमता का भी उपयोग कर रहा है। यह समाधान टीवी को बंद करने के लिए केबल को अनप्लग करने जैसा है।
यीशु

15

विकल्प 1: रेडिस इंस्टॉलेशन डायरेक्टरी में जाएं और srcमेरे मामले में नेविगेट करें :

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

जहां 6379 डिफ़ॉल्ट पोर्ट है।

विकल्प 2: रेडिस प्रक्रिया ढूंढें और मारें

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

मैं सेंटोस 6.7, x86_64 का उपयोग कर रहा हूं

आशा है ये मदद करेगा


12

रूट उपयोगकर्ता के साथ टर्मिनल में रेडिस सर्वर प्रकार को रोकें

sudo service redis-server stop

संदेश को रेडिस-सर्वर को रोकने के बाद प्रदर्शित किया जाएगा

Stopping redis-server: redis-server.

यदि आप रेडिस-सर्वर प्रकार शुरू करना चाहते हैं

sudo service redis-server start

यदि आप सर्वर प्रकार को पुनरारंभ करना चाहते हैं

sudo service redis-server restart

मुझे आश्चर्य है कि अगर डिफ़ॉल्ट रूप से कॉन्फ़िगर किया गया है तो यह अभी भी नए रेडिस संस्करणों के लिए मान्य है। जारी service --status-allकरना रेडिस नहीं दिखाएगा, इसलिए किसी भी serviceआदेश के खिलाफ विफल हो जाएगा redis-server। लेकिन रेडिस शो में है ps -ef। मुझे अभी कोई संबंधित दस्तावेज नहीं मिला है।
थीमफील्ड

उबंटू 18.04 पर लगता sudo service redis start/stop/statusहै कि दोनों ही करते हैं।
फ्रैम्बेलज

10

एक और तरीका हो सकता है:

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

* NIX और OSX पर काम करता है


1
@ जोंएसे, नहीं, यह स्वीकृत उत्तर आईएमओ नहीं होना चाहिए। ओएस के चलने की प्रक्रिया को मारने से यह मामला उपेक्षित हो जाता है कि एप्लिकेशन में मेमोरी में कुछ डेटा हो सकता है जो अभी तक अधिक लगातार स्टोर में सहेजा नहीं गया है। एप्लिकेशन द्वारा प्रदान की गई विधि के माध्यम से एप्लिकेशन को शट डाउन करना बेहतर विकल्प है।
जोकेम शुल्नेक्लोपर

6

MacOSX - यह काम किया :)

चरण 1: पहले से चल रहे रेडिस सर्वर का पता लगाएं

ps auxx | grep redis-server

चरण 2: पीआईडी ​​(प्रोसेस आईडी) ढूंढकर विशिष्ट प्रक्रिया को मारें - रेडिस सेवर

kill -9 PID

5

यदि आप जानते हैं कि यह किस पोर्ट पर चल रहा है (डिफ़ॉल्ट रूप से यह 6379 होगा), तो आप उस पोर्ट का उपयोग करके प्रक्रिया की पीड को प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं और फिर उसी पिड के लिए किल कमांड को निष्पादित कर सकते हैं।

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

उपरोक्त कमांड आपको पीड देगा।

मार डालना <pid>;

यह आपके सर्वर को बंद कर देगा।


5

सिस्टमड, 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

आमतौर पर यह समस्या तब आती है जब मैं अपना कंप्यूटर बंद कर देता हूं (या दौड़ना छोड़ देता है) अनियमित तरीके से .. मेरा मानना ​​है कि पोर्ट खुला हो जाता है, जबकि प्रक्रिया बंद हो जाती है लेकिन पिछले पोर्ट से बंधी रहती है।

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

जाना अच्छा है।


3

मेरे मामले में यह था:

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

यह जानने के लिए कि आपका सेवा नाम क्या है, आप चला सकते हैं:

sudo updatedb
locate redis

और यह आपके सिस्टम में हर Redis फाइल को दिखाएगा।


3

यदि आपने रेडिस स्थापित करते समय इंस्टाल किया (जैसे ubuntu) तो आप कर सकते हैं:

redis-cli shutdown

जैसा कि @ yojimbo87 ने बताया है :)


2

एक और तरीका हो सकता है:

brew services stop redis

+10 इसके लिए, यह मैक पर माफी के बिना काम करता है! यह भी काम करता है ™ काढ़ा सेवाओं redis ™ शुरू ¢ काढ़ा सेवाओं redis पुनः आरंभ ¢
Victor.Uduak


2

यदि आप डॉकटर कंटेनर में रेडिस चला रहे हैं, तो वर्तमान उत्तरों में से कोई भी मदद नहीं करेगा। आपको रेडिस कंटेनर को रोकना होगा। अन्यथा, रेडिस प्रक्रिया श्वसन बनाए रखेगी।

$ 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

यदि आप जानते हैं कि आपके पोर्ट पर कौन सा पोर्ट (डिफ़ॉल्ट: 6379) चल रहा है, तो आप विकल्प 1 के साथ जा सकते हैं या आप अपनी रेडिस प्रक्रिया की जांच कर सकते हैं और आप विकल्प 2 को मार सकते हैं

विकल्प 1:
बंदरगाह पर मार प्रक्रिया:

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

विकल्प 2:
पहले से चल रहे रेडिस सर्वर का पता लगाएं:

 ps auxx | grep redis-server

पीआईडी ​​(प्रोसेस आईडी) खोजकर विशिष्ट प्रक्रिया को मारें - रेडिस सेवर

kill -9 PID

अब अपने रेडिस सर्वर को शुरू करें

redis-server /path/to/redis.conf 

1

मैं विशेष रूप से रेडिस के लिए नहीं जानता, लेकिन सामान्य रूप से सर्वर के लिए:

क्या ओएस या वितरण? अक्सर एक स्टॉप या /etc/init.d / ... कमांड होगा जो एक पिड फ़ाइल में मौजूदा पिड को देखने में सक्षम होगा।

आप देख सकते हैं कि क्या प्रक्रिया पहले से ही बंदरगाह के लिए बाध्य है sudo netstat -nlpt(लिनक्स विकल्प; अन्य नेटस्टैट स्वाद अलग-अलग होंगे) और इसे रोकने के लिए संकेत दें। मैं एक चल रहे सर्वर पर उपयोग नहीं करूंगा kill -9जब तक कि वास्तव में इसे बंद करने के लिए कोई अन्य संकेत या विधि न हो।


1

नीचे दिए गए आदेश उबंटू सर्वर पर मेरे लिए काम करते हैं

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

0

MacOSX पर,

इसी से मेरा काम बना है

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

0

अगर आपके 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 निर्देशिका में लिखने की अनुमति नहीं दे रहा है।

एक बार जब मुझे एहसास हुआ कि, मैंने रूट का उपयोग करके लॉग इन किया है, रिडिस पर रिस्टार्ट कमांड ( service redis restart) और सब कुछ काम किया। यह एक सिरदर्द था लेकिन उम्मीद है कि यह किसी को थोड़ा समय बचाता है।


0

Redis में कॉन्फ़िगरेशन पैरामीटर pidfile(जैसे /etc/redis.conf - check है redis source code देखें ), उदाहरण के लिए:

# 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

यदि इसे सेट या सेट किया जा सकता है, तो उपयोग करके प्रोसेस आईडी (पीआईडी) की खोज करें ps + grep कुछ इस तरह किया जा सकता है:

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

यदि आवश्यक हो तो इस तरह से रेडिस स्टॉप स्क्रिप्ट बना सकते हैं (अनुकूलित डिफ़ॉल्ट रेडिस 5.0 init.d स्क्रिप्ट रेडिस सोर्स कोड में ):

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.