रेल सर्वर को रोक नहीं सकते


126

मैं रेल के लिए नया हूं और मैं एक ubuntu मशीन और रूबिमाइन आईडीई का उपयोग कर रहा हूं। समस्या यह है कि मैं रेल सर्वर को रोकने में असमर्थ हूं। मैंने रेल की प्रक्रिया को मारकर सर्वर को रोकने की कोशिश की। लेकिन, जब मैं दौड़ता हूं, तो pgrep -l railsऐसी कोई प्रक्रिया नहीं पाई जाती है। इसलिए, मैं केवल रूबी प्रक्रियाओं को मारने में सक्षम हूं, लेकिन, सर्वर बंद नहीं होगा।

मैंने कोशिश की ./script/server stop(जब से मैंने इसे शुरू किया है ./script/server start), लेकिन, यह काम नहीं किया। चारों ओर घूमना और कुछ स्टैकओवरफ्लो पोस्ट ढूंढना, मैंने लोकलहोस्ट पोर्ट के सुनने के बंदरगाह को बदलने की कोशिश की, लेकिन सफलता के बिना। क्या कोई मदद कर सकता है?


2
=> Ctrl-C सर्वर बंद करने के लिए
gabrielhilal

@ क्या आप सभी प्रक्रिया को मारना चाहते हैं?
लर्नर

@ श्री, हां मैं सभी प्रक्रिया को मारना चाहता हूं
एप्सिलोन्स

1
@ नवीन ने नीचे मेरे अपडेट किए गए उत्तर की जाँच करें और एक कोशिश करें और मुझे बताएं
शिक्षार्थी

जवाबों:


303

आप निम्नलिखित की तरह अन्य बंदरगाहों का उपयोग कर सकते हैं:

rails server -p 3001

आम तौर पर आपके टर्मिनल में आप Ctrl + Cसर्वर को बंद करने की कोशिश कर सकते हैं ।

रूबी को डिफॉल्ट सर्वर (जो है WEBrick) पर रूबी को मारने का दूसरा तरीका है:

kill -INT $(cat tmp/pids/server.pid)

प्रक्रिया के पीआईडी ​​का पता लगाने के लिए अपने टर्मिनल में:

$ lsof -wni tcp:3000

फिर, प्रक्रिया को मारने के लिए PID कॉलम में संख्या का उपयोग करें:

उदाहरण के लिए:

$ kill -9 PID

और कुछ अन्य उत्तर मुझे मिले:

चलने के दौरान रेल सर्वर को रोकने के लिए, दबाएँ:

CTRL-C
CTRL-Z

आपको नियंत्रण वापस मिल जाएगा bash। फिर टाइप करें (बिना $):

$ fg

और यह वापस प्रक्रिया में जाएगा, और फिर Rails sठीक से बाहर निकल जाएगा ।

यह थोड़ा परेशान करने वाला है, लेकिन यह सुनिश्चित है कि यह प्रक्रिया को मैन्युअल रूप से मारता है। यह बहुत बुरा नहीं है और यह सबसे अच्छा मैं समझ सकता हूं।

अद्यतन उत्तर:

आप नाम में killall -9 rails" rails" के साथ सभी चल रहे ऐप को मारने के लिए उपयोग कर सकते हैं ।

killall -9 rails


क्षमा करें, lsof -wni tcp: 3000 रिटर्न कुछ भी नहीं है, और मेरे पास कोई tmp / pids / folder नहीं है
epsilones

यदि वेब्रिक चल रहा है, तो इसकी पीआईडी {APP_ROOT}/tmp/pids/server.pidफाइल में है, इसलिए आपको इसकी तलाश नहीं करनी चाहिए - जब तक सर्वर चल रहा है। इसलिए, यदि ctrl-cआप ऐसा करने के बजाय बस दूसरे टर्मिनल में कमांड को मारते हैं, तो यह वीब्रिक सर्वर को तुरंत मार देगा।
शिक्षार्थी

जब मैं किल -9 रेल चलाता हूं, तो मुझे यह संदेश मिलता है कि 'ऐसी कोई प्रक्रिया नहीं मिली'?
एप्सिलोन्स

Btw, फ़ोल्डर {APP_ROOT} / tmp / pids / वास्तव में मौजूद है लेकिन यह खाली है
epsilones

1
इनमें से किसी भी आज्ञा ने मेरे लिए कुछ नहीं किया। हालांकि, मशीन को रिबूट करने से समस्या ठीक हो गई।
हर्ब मीहान

51

आप निम्न तरीके से grep कमांड का उपयोग कर सकते हैं,

ps aux | grep rails

और फिर

kill -9 {process_id} 

वास्तव में, यह कॉमनैड केवल '0:00 grep --color = ऑटो रेल' को पकड़ता है, जो मुझे लगता है कि grep को कमांड कहा जाता है ...
epsilones

सर्वर के लिए काम करने वाले इस समाधान का धन्यवाद, जो अभी भी टर्मिनल बल को बंद करता है। नाइस
ksugiarto

और क्या होगा अगर मेरे पास कई प्रक्रियाएं हैं और मैं उन्हें एक-एक करके मैन्युअल रूप से मारना नहीं चाहता हूं?
निकोले कोंडरांटेंको

आप उन सभी से मार सकते हैंkillall -9 rails
मैक्सिमसツ

सर्वर मुझे करना थाps aux | grep puma
सामी बीरनबाम

27

pkill -9 rails रेल की सभी प्रक्रिया को मारने के लिए

अद्यतन उत्तर

ps aux|grep 'rails'|grep -v 'grep'|awk '{ print $2 }'|xargs kill -9

यह किसी भी चलने वाली रेल प्रक्रिया को मार देगा। किसी अन्य प्रक्रिया को मारने के लिए 'रेल' को किसी और चीज़ से बदलें।


18

सर्वर प्रक्रिया को मारने के लिए निम्नलिखित कदम उठाए गए हैं:

1. lsof -i tcp:3000

2. kill -9 1234

1234प्रक्रिया की पीआईडी कहां है: लोकलहोस्ट: चरण 1 में 3000 प्रदर्शन।

या

Rails.root/tmp/pids/सर्वर के तहत फ़ाइल और सर्वर को हटाएं ( पुनरारंभ करें)।

या

कमांड का उपयोग करके दूसरे पोर्ट में ऐप खोलें:

rails s -p 3001


15

मेरे मैक पर killall -9 railsकाम नहीं करता है। लेकिन killall -9 rubyकरता है।


वही। वह COMMANDभी मूल्य है।
IIllIIll

10

मैं आमतौर पर उपयोग करता हूं:

killall ruby

या

pkill -9 ruby

जो सभी रूबी संबंधित प्रक्रियाओं को मार देगा rails server, जैसे कि चल रहे हैं rails console, आदि।


यदि आप pkill -9 या किल -9 नहीं जानते हैं, तो यह भी ध्यान देने योग्य हो सकता है कि यह अन्य रूबी प्रक्रियाओं को भी मार सकता है, उदाहरण के लिए rubymine IDE।
केजेल

4

1. बस रेल एप्लिकेशन निर्देशिका से पीआईडी ​​फ़ाइल हटाएँ

Rails_app -> tmp -> pids -> pid file

फ़ाइल हटाएँ और चलाएँ

rails start


2. रेल 5.0 और इसके बाद के संस्करण के लिए, आप इस कमांड का उपयोग कर सकते हैं

rails restart


3

ctrl+cअपने Webrick सर्वर को बंद करने के लिए उपयोग करें ।

दुर्भाग्य से अगर इसका काम नहीं करता है तो जबरदस्ती टर्मिनल को बंद करें और इसे पुनरारंभ करें।

एक और चाल है

1. open your system-monitor(a gui application) on ubuntu

2. Select processes tab 

3. Then look for a process having name 'ruby'

4. End that process

यहाँ तक कि कभी-कभी सर्वर चालू हो जाता है। क्योंकि हमें सर्वर को बंद करने के लिए अस्थायी / पीआईडी ​​को मारने की आवश्यकता है
शिक्षार्थी

लेकिन आम तौर पर, टर्मिनल को समाप्त करना प्रक्रिया को रोक देता है क्योंकि इसकी अग्रभूमि प्रक्रिया और टर्मिनल पर चलती है।
गोपाल एस राठौर

3

Tmp / pids फ़ोल्डर से server.pid को हटाएं। मेरे मामले में, त्रुटि थी: एक सर्वर पहले से ही चल रहा है। /Home/sbhatta/myapp/tmp/pids/server.pid चेक करें।

इसलिए, मैं server.pid को हटा देता हूं

rm /home/sbhatta/myapp/tmp/pids/server.pid फिर भागो rails s


3

चरण 1: पता करें कि कौन सी वस्तुएं 3000 पोर्ट की खपत कर रही हैं।

lsof -i:3000

चरण 2: नामित प्रक्रिया का पता लगाएं

मैक के लिए

ruby      TCP localhost:hbci (LISTEN)

उबंटू के लिए

ruby      TCP *:3000 (LISTEN)

चरण 3: प्रक्रिया की पीआईडी ​​ढूंढें और इसे मार दें।

kill -9 PID

2

Ctrl-Z को सामान्य रूप से ट्रिक करना चाहिए।


2

मैंने killall -9 railsश्री की तरह इस्तेमाल किया और यह काम नहीं किया। मैंने कमांड को समायोजित किया killall -9 rubyऔर सर्वर तुरंत बंद हो गया।

Tl, डॉ: killall -9 ruby


2

यह उतना ही सरल है

pkill -9 ruby

न कुछ ज्यादा, न कुछ कम


1

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

rails s -p 3001

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


1

/tmp/tmp/server.pid की जाँच करें

अंदर एक पिड है।

आमतौर पर, मैं बीमार "मार -9 THE_PID" को cmd में करता हूं


मेरे पास यह रास्ता नहीं है, यह एक ubuntu मशीन पर कहां हो सकता है?
एप्सिलोन्स

यह छिपा हुआ है ... अपनी छिपी हुई फाइलों को दिखाने के लिए अपने ऐप फ़ोल्डर, ctrl + H पर जाएं, फिर इसे देखने में सक्षम हों
Nich

1

मैंने विंडोज पर ध्यान दिया है (Im 10 का उपयोग कर रहा हूं लेकिन सुनिश्चित नहीं है कि अगर ओलेर के लिए भी ऐसा ही हो)। यदि आप cmd.exe और ctrl + c का उपयोग करते हैं, तो raisl सर्वर सही तरीके से बंद हो जाता है।

हालाँकि, अगर आप Git Bash का उपयोग करते हैं, तो यह नहीं है। यह कहते हैं कि यह है, लेकिन जब आप tmp pids को देखते हैं, तो यह अभी भी है।

शायद गिट बग के साथ एक बग?


1

killall -9 rubyसभी माणिक प्रक्रियाओं को मार देगा, और कम से कम मेरी मशीन पर, रेल सर्वर रूबी प्रक्रियाओं के रूप में दिखाई देंगे। killall -9 railsबहुत अधिक विशिष्ट है और पुराने संस्करणों के लिए काम नहीं करता है (यह एक 'रेल देता है: कोई प्रक्रिया नहीं मिली' क्योंकि इस प्रक्रिया को माणिक कहा जाता है)

कुछ समय पहले इस समस्या का सामना किया। एक्टीमेडिन में एक फॉर्म जमा करने के बाद, रेल सर्वर बस लटका दिया गया और मैं इसे सामान्य साधनों का उपयोग करके मारने में असमर्थ था (भले ही ctrl + z के बाद भी यह पृष्ठभूमि में चल रहा था)। लर्नर के उत्तर ने मदद की, लेकिन इस कमांड को प्रोसेस आईडी की आवश्यकता नहीं है।


0

इस सवाल के लिए देर हो चुकी है। यहाँ मेरा 2 सेंट है। जब मेरे पास इसकी पहुँच नहीं है तो मैंने सर्वर को रोकने के लिए एक रेक कार्य किया। मैंने केवल मैक पर परीक्षण किया है।

इसके साथ ही आप इसे अपने प्रोजेक्ट में जोड़ सकते हैं, फिर रेक कमांड चला सकते हैं।

हेयर यू गो:

Gist लिंक: -Latest वर्जन यहां होगा। https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

यहाँ कुछ कोड:

# Make a file under: `project_root/lib/tasks/server.rake`

# Then paste the following code

    namespace :server do
      desc "Stop the running server by killing the PID"
      task :kill do
        STDOUT.puts "Enter port number: "
        post_number = STDIN.gets.strip
        system "pid=$(lsof -i:#{post_number.to_i} -t); kill -TERM $pid || kill -KILL $pid"
      end
    end

# Then to use it in the terminal: `rake server:kill`

0

इसके अलावा, सुनिश्चित करें कि आप कमांड टर्मिनल + C उसी टर्मिनल (टैब) में कर रहे हैं जिसका उपयोग सर्वर को शुरू करने के लिए किया जाता है।

मेरे मामले में, मेरे पास 2 टैब थे लेकिन मैं सर्वर को सही टैब से रोकना भूल गया और मैं सोच रहा था कि Cntrl + C काम क्यों नहीं कर रहा है।


0

एक सुपर आसान तरीका होगा

gem install shutup

फिर अपने रेल परियोजना के वर्तमान फ़ोल्डर में जाएं और चलाएं

shutup # यह वर्तमान में चल रही रेल प्रक्रिया को मार देगा

आप हर बार 'शटअप' कमांड का उपयोग कर सकते हैं

डिक्लेमर: मैं इस रत्न का निर्माता हूं

नोट: यदि आप rvm का उपयोग कर रहे हैं तो विश्व स्तर पर मणि स्थापित करें

rvm @global do gem install shutup


0

हम PORT नहीं का उपयोग करके लिनक्स पर रेल सत्र को मार सकते हैं

fuser -k 3000/tcp 

यहाँ 3000 एक पोर्ट नं। अब अपने सर्वर को पुनः आरंभ करें, आप देखेंगे कि आपका सर्वर चालू स्थिति में है।


0

इन कदमों का अनुसरण करें:

  1. अपना प्रोजेक्ट खोलें
  2. tmp फ़ोल्डर में चयन करें
  3. pids फ़ोल्डर का चयन करें
  4. server.pid फ़ाइल हटाएं
  5. अब अपना रेल सर्वर शुरू करें

मेरे रेल 5.2 आवेदन पर काम नहीं किया। Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.bbieri

0
  1. बस दिए गए स्थान का उपयोग करके फ़ाइल खोलें sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. जिस प्रक्रिया में प्रक्रिया चल रही हो, उस प्रक्रिया को देखें।

  3. निर्दिष्ट प्रक्रिया / थ्रेड का उपयोग करके मारें kill -9 84699


0

रेल का उपयोग कर 6 पर

ps aux | grep rails सर्वर प्रक्रिया वापस नहीं कर रहा था

मुझे करना था

ps aux | grep puma

वास्तविक प्रक्रिया को खोजने के लिए और फिर इसे मारकर उपयोग करें

kill -9 {process_id}


0

यदि आप रेल के अधिक आधुनिक संस्करण का उपयोग कर रहे हैं और यह वेब सर्वर के रूप में प्यूमा का उपयोग करता है, तो आप अटकी प्यूमा प्रक्रिया को खोजने के लिए निम्न कमांड को चला सकते हैं:

ps aux | grep puma

इसका परिणाम इसके समान होगा:

85923 100.0  0.8  2682420 131324 s004  R+    2:54pm   3:27.92 puma 3.12.0 (tcp://0.0.0.0:3010) [my-app]
92463   0.0  0.0  2458404   1976 s008  S+    3:09pm   0:00.00 grep puma

आप उस प्रक्रिया को चाहते हैं जिसका संदर्भ नहीं है grep। इस मामले में, प्रक्रिया आईडी 85923 है।

मैं उस प्रक्रिया को मारने के लिए निम्न कमांड चला सकता हूं:

kill -9 85923

यहाँ छवि विवरण दर्ज करें

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