एक सर्वर पहले से चल रहा है। चेक करें… / tmp / pids / server.pid। बाहर निकलना - रेल करना


80
..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

एक रेल शुरुआत के लिए इसे हल करने का सबसे आसान तरीका क्या है?



tempफ़ोल्डर को हटाना आपको समस्या को ठीक कर सकता है।
शाह

जवाबों:


168

आप server.pidफ़ाइल को हटा सकते हैं ।

rm /your_project_path/tmp/pids/server.pid

अन्य:

OSX में प्रयास करें:

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

या लिनक्स में:

ps -aef | grep रेल

या

lsof -wni tcp:3000

का उपयोग कर प्रक्रिया को मार डालो

kill -9 PID (eg,2786)

1
Nitpicking - लेकिन मुझे लगता है कि आप OSX का मतलब है, iOS नहीं। @SCraig यह कमांड लाइन में किया जाता है।
jmknoll

1
मैंने सर्वर .pid फ़ाइल को हटा दिया, और अभी भी समस्या थी। मेरे सिस्टम को फिर से शुरू करना, हालांकि आदर्श नहीं है, एक त्वरित सुधार था।
मैट

एक जादू की तरह काम किया!
विलियम हैम्पशायर

सर, मैं इसे कैसे रोक सकता हूं? यह मेरे साथ बहुत बार हो रहा है, मैं मैन्युअल रूप से सर्वर को हटाने से ऊब गया हूं।
उमगॉन

130

शॉर्ट और क्रिस्प सिंगल लाइन कमांड, जो इसका ख्याल रखेगा।

kill -9 $(lsof -i tcp:3000 -t)

7
योग्य, हो सकता है कि आप अपने ब्राउज़र टैब को पहले बंद करना चाहें, यदि आपके पास यह लोकलहोस्ट के लिए खुला हो: 3000, अन्यथा यह आपके ब्राउज़र को मार सकता है
TMin

किसी ने इसे zsh में उपनाम के रूप में सहेजने की कोशिश की और यह काम नहीं कर रहा है?
स्टैकजेली

कभी-कभी मेरा सर्वर बंद हो जाता था लेकिन रूबी ने सीपीयू को अधिकतम कर दिया था। जब यह मामला मुझे पीआईडी ​​प्राप्त rubyकरके मारना है topऔर फिर चल रहा हैkill -9 <PID>
daveomcd

17

server.pid केवल चल रहे सर्वर की प्रक्रिया आईडी शामिल है।

यदि तुम करो:

more /your_project_path/tmp/pids/server.pid

आपको एक नंबर मिलेगा (6745 कहते हैं) जिसे आप पिछले सर्वर को कमांड किल के साथ रोकने के लिए उपयोग कर सकते हैं:

kill -9 6745

और फिर आप rmकमांड के साथ फाइल को हटा सकते हैं

rm /your_project_path/tmp/pids/server.pid

1
Backticks server.pidमें संलग्न होने के कारण शेल को server.pid निष्पादित करने का प्रयास करना होगा, क्या यह नहीं होगा?
mwfearnley

14

यदि आप docker-compose का उपयोग कर रहे हैं, और docker-compose.yml में है: तो volumes: - .:/myapp इसका मतलब है कि आपको स्थानीय कार्यक्षेत्र कंटेनर / myapp फ़ोल्डर में मैप किया गया है।

संस्करणों को परिभाषित करने के लिए / myapp में कुछ भी हटाया नहीं जाएगा।

आप ./tmp/pids/server.pidस्थानीय मशीन में हटा सकते हैं । तब कंटेनर के / myapp में यह फ़ाइल नहीं होगी।


4
तुम भी बस हर कंटेनर शुरू पर स्वचालित रूप से उस फ़ाइल को हटा सकते हैं command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'":।
Refs

12

सरल:

ऐसा होने पर प्रोजेक्ट के रूट फ़ोल्डर में जाएं और चलाएं:

gem install shutup
shutup

यह वर्तमान में चल रही प्रक्रिया को ढूंढ लेगा, इसे मार देगा और pid फ़ाइल को साफ कर देगा

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

rvm @global do gem install shutup

5

समस्या का उपयोग करके हल किया जा सकता है:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)

5

यह कभी-कभी होता है क्योंकि आप सर्वर को बल से बंद कर देते हैं, उदाहरण के लिए ओएस / मशीन को मैन्युअल रूप से बंद करना ताकि सर्वर को सर्वर पर लॉग इन करने के लिए पर्याप्त समय न हो।

एक आसान तरीका मैन्युअल रूप से जाना जाता है tmp/pids/(निर्देशिका जो आपके कंसोल में दिखाई गई है।) और server.pidफ़ाइल को हटा दें । फिर, जब आप सर्वर को फिर से शुरू करते हैं, rails serverया rails s, यह एक नया सर्वर बनाता है। पीआईडी ​​और आप विकास जारी रख सकते हैं।



3

path/to/your/rails/project/tmp/pids/server.pidफ़ाइल खोलें ।

उसमें आपको जो नंबर मिले उसे कॉपी करें।

Daud kill -9 [PID]

फ़ाइल [PID]से आपके द्वारा कॉपी किया गया नंबर कहां है server.pid

यह रनिंग सर्वर प्रक्रिया को मार देगा और आप बिना किसी परेशानी के अपना सर्वर फिर से शुरू कर सकते हैं।


3

आदेश का उपयोग करके server.pid को मारें:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

नोट: अपने server.pid पथ का उपयोग करें जो कंसोल / टर्मिनल में प्रदर्शित होते हैं।

धन्यवाद।


3

डॉक में एप्लिकेशन को चलाने के संदर्भ में अतिरिक्त जानकारी के लिए।

Docker-compose.yml फ़ाइल में, एप्लिकेशन कंटेनर के अंतर्गत, आप निम्न में से किसी एक का उपयोग कर सकते हैं:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

या

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

;या तो के उपयोग पर ध्यान दें या &&, जो फ़ाइल को खोजने में विफल रहता है, समय से पहले अपने कंटेनर को बंद करने के लिए &&बाहर निकलने का संकेत भेजेगा rm। उपयोग ;करना जारी रहेगा।

यह पहली जगह में क्यों होता है? तर्क यह है कि यदि सर्वर (प्यूमा / पतला / जो भी हो) सफाई से बाहर नहीं निकलता है, तो यह मेजबान मशीन में एक पीड को छोड़ देगा, जिससे एक निकास त्रुटि हो सकती है।

होस्ट सिस्टम पर फ़ाइल को मैन्युअल रूप से हटाने के बजाय पोर्टेबिलिटी के लिए, यह जांचना बेहतर है कि क्या फ़ाइल स्क्रिप्टेड के भीतर मौजूद है या फ़ाइल ही लिखें।


3

पहले पीआईडी ​​खोजें # - जहां रेल सर्वर अटक गया

अटक पीआईडी ​​को खोजने के लिए इसे चलाएं

cat ./tmp/pids/server.pid

यह कुछ इस तरह लौटेगा 65829

फिर KID कि PID =>kill 65829


2

यह आदेश चलाएँ -

lsof -wni tcp:3000

फिर आपको निम्न तालिका मिलेगी -

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    2552 shyam   17u  IPv4  44599      0t0  TCP 127.0.0.1:3000 (LISTEN)
ruby    2552 shyam   18u  IPv6  44600      0t0  TCP [::1]:3000 (LISTEN)

इस कमांड को रन करें और उपरोक्त तालिका से पीआईडी ​​को बदलें

kill -9 PID

उदाहरण:

kill -9 2552


0

इस समस्या के लिए,

मैंने क्या किया है:

  • के अंतर्गत स्थित है जो Pids फ़ोल्डर हटाएँ app/tmp/
  • और फिर, टर्मिनल को बंद करें जिसे हम वर्तमान ऐप चला रहे हैं और टैब बंद करें (, ब्राउज़र विंडो)

  • उसके बाद, फिर से फ़ोल्डर के अंदर जाकर टर्मिनल खोलें, और फिर, rails s

  • फिर, यह नया टैब खोलता है जो हमारा एप्लिकेशन चला रहा है

0

पहले फ़ाइल के अंदर स्थित कम्बर को कॉपी करें और फिर उसे हटा दें: rm /your_project_path/tmp/pids/server.pid फिर इसे बनाएँ। /YOUR_PROJECT_PATH/tmp/pids/server.pid स्पर्श करें यह मेरे लिए काम किया।


0

टर्मिनल पर कमांड के नीचे दिए गए रन (केवल लिनक्स के लिए)

ps aux | grep rails

और फिर

kill -9 [pid]

दूसरा रास्ता

lsof -wni tcp:3000

और फिर

kill -9 [PID]

0

सुलझाने

पहले से उपयोग में पता - बाँध (2) "रूबी ऑन रेल्स में 500 त्रुटि

हाल ही में मैंने एक प्रोडक्शन सर्वर पर रेल्स ऐप चलाने की कोशिश की। न केवल यह काम नहीं किया, बल्कि इसने मेरे लोकलहोस्ट: 3000 विकास सर्वर को भी तोड़ दिया। लोकलहोस्ट केवल एक खाली सफेद पृष्ठ या 500 त्रुटि लोड करेगा।

इसे हल करने के लिए, मैंने दो त्वरित आदेशों का उपयोग किया। यदि ये परिणाम नहीं देते हैं, तो आपको समाधान के लिए कहीं और देखने की आवश्यकता हो सकती है, लेकिन यह एक अच्छा त्वरित समाधान है।

lsof -wni tcp: 3000

रूबी 52179 रेचलचेरिन 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (लिस्टेन)
रूबी 52179 रेचलचेरिन 51u IPv4 0x ... c7bb 0t0 टीसीपी 127.0.0.1:hbci (लिस्टेन)
रूबी 52180 रेचलचेरिन 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (लिस्टेन)
रूबी 52180 रेचलचेरिन 51u IPv4 0x ... c7bb 0t0 टीसीपी 127.0.0.1:hbci (LISTEN)

यह कमांड 3000 पोर्ट पर मेरी वर्तमान में चल रही सभी प्रक्रियाओं और उनके पीआईडी ​​(प्रोसेस आईडी) को दिखाता है। क्योंकि मौजूदा चल रही प्रक्रियाएं हैं जो सही ढंग से बंद नहीं हुई हैं, मेरा नया: 3000 सर्वर शुरू नहीं हो सकता है, इसलिए 500 त्रुटि।

52179 को मार डालो

52180 को मार डालो

रेल एस

मैंने लिनक्स मार कमांड का इस्तेमाल मैन्युअल रूप से आपत्तिजनक प्रक्रियाओं को रोकने के लिए किया था। यदि आपके पास 4 से अधिक है, तो किसी भी पीआईडी ​​पर किल का उपयोग करें जब तक कि पहला कमांड खाली न आए। फिर, अपने लोकलहोस्ट को पुनः आरंभ करने का प्रयास करें: 3000 सर्वर फिर से। इससे आपके कंप्यूटर को नुकसान नहीं होगा! यह बस आपके स्थानीयहोस्ट पोर्ट पर मौजूदा रूबी प्रक्रियाओं को मारता है। एक नया सर्वर इन प्रक्रियाओं को फिर से शुरू करेगा। सौभाग्य!


0

विंडोज के लिए समाधान:

  1. pid को \ tmp \ pids \ server.pid से देखें
  2. व्यवस्थापक के रूप में cmd ​​खोलें
  3. टास्ककिल / एफ / पीआईडी ​​[चरण 1 से पिड]
  4. server.pid फ़ाइल हटाएं
  5. सर्वर को पुनरारंभ करें

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