"FATAL: लॉक फ़ाइल" पोस्टमास्टर.पिड "पहले से मौजूद है"


68

मैं बस के माध्यम से postgres पुनर्स्थापित brew install postgres

मैं भागा initdb /usr/local/var/postgres -E utf8लेकिन यह मिला:

The files belonging to this database system will be owned by user "atal421".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".

initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".

इसलिए, मैंने rm -rfफ़ोल्डर को फिर से पोस्ट किया और इसे फिर से चलाया:

 initdb /usr/local/var/postgres -E utf8

यह कहा कि सब कुछ ठीक था:

Success. You can now start the database server using:

    postgres -D /usr/local/var/postgres

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

postgres -D /usr/local/var/postgres


FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 13731) running in data directory "/usr/local/var/postgres"?

अब जब मैं अपने एक्टिविटी मॉनिटर को देखता हूं तो मैं पोस्टग्रेजेशन के 6 उदाहरण देख सकता हूं।

मैं यह कैसे तय करुं?


आप शायद एक पोस्टमास्टर और पांच उपयोगिता बैकेंड्स के साथ एक उदाहरण देखते हैं postgres। PostgreSQL एक बहु-प्रक्रिया वास्तुकला है।
क्रेग रिंगर

जवाबों:


104

सार्वजनिक सेवा घोषणा: कभी नष्ट न करें postmaster.pid। वास्तव में। डेटा भ्रष्टाचार प्राप्त करने का शानदार तरीका।

आपके पास पहले से ही PostgreSQL स्थापित था, और आपने चल रहे सर्वर को बंद किए बिना डेटा dir को हटा दिया। तो अब आपके पास कुछ अनाथ PostgreSQL सर्वर प्रक्रियाएं हैं जो डेटा फ़ाइलों को प्रबंधित कर रही हैं जो हटा दी गई हैं, इसलिए वे अब फ़ाइल सिस्टम में पहुंच योग्य नहीं हैं और जब उन्हें खोलने के लिए अंतिम फ़ाइल हैंडल बंद हो जाएगा तो वे पूरी तरह से हटा दिए जाएंगे। आप pg_ctlसर्वर को सामान्य की तरह बंद करने के लिए उपयोग नहीं कर सकते , क्योंकि आपने क्लस्टर डेटादिर को हटा दिया है, इसलिए आपको बस प्रक्रियाओं को मारना होगा। पोस्टमास्टर को मार डालो ( उपयोग करें kill -9, बस एक साधारण हत्या करेंगे) और बाकी भी बंद हो जाएंगे।

फिर आप डेटा के नए सिरे से डेटा के खिलाफ डेटाडेयर में एक नया सर्वर शुरू करने में सक्षम होंगे initdb

यह अत्यधिक संभावना है कि जब तक आप PostgreSQL के अन्य पुराने संस्करण को अनइंस्टॉल नहीं करते हैं, तब तक आप ट्रैक का विरोध करेंगे।

संक्षेप में:

cat /usr/local/var/postgres/postmaster.pid

पहली पंक्ति पर संख्या को नोट करें, जो पोस्टमास्टर का पिड है।

सत्यापित करें psकि pid एक पोस्टमास्टर पोस्टमास्टर है।

निम्न आदेश के साथ पोस्टमास्टर प्रक्रिया को मारें, आपके द्वारा नोट किए गए नंबर के साथ 'पीआईडी' की जगह। फिर से, का उपयोग न करें kill -9या kill -KILL, बस एक सादे का उपयोग करें kill, यानीSIGTERM :

kill PID

अगर पीड पोस्टग्राउज़ पोस्टमास्टर का नहीं है, तो मैन्युअल रूप से killकोई भी postgresबैकेंड जो अभी भी चल रहा है, सत्यापित करें कि वे अब नहीं चल रहे हैं, और उसके बाद ही हटाएं postmaster.pid। (आपको यह भी सत्यापित करना चाहिए कि postmaster.pidसाझा संग्रहण पर नहीं है जहां सर्वर किसी अन्य वीएम / होस्ट पर चल सकता है)।


यह मेरे लिए काम किया!
टोन

यह काम। एक समस्या थी जहां मैंने अपना कचरा खाली कर दिया था और ऐसा लगता है कि कुछ डेटा फाइलें शायद वहां थीं ... निश्चित नहीं कि कैसे, लेकिन वे थे। एक बार जब मैंने पुरानी प्रक्रिया को मार दिया तो यह ठीक काम कर गई।
दान एल

हाँ। उस पर हाजिर था।
आमोस फोलारिन

7
यह उल्लेख किया जाना चाहिए कि एक कठिन दुर्घटना के बाद पीआईडी ​​फ़ाइल बच सकती है, जबकि प्रक्रिया मर जाती है। उस स्थिति में PID फ़ाइल में PID एक ऐसी प्रक्रिया को इंगित कर सकता है जिसे Postgres से कोई लेना-देना नहीं है। उस मामले के लिए दूसरा जवाब देखें।
फेबलिंग

2
एक सादा kill PIDने मेरे लिए काम नहीं किया। मुझे जरूरत थी kill -3 PID। मेरे मामले में मैंने एक शटडाउन किया था जिसने प्रक्रियाओं को ठीक से रोकने के बिना टर्मिनल खिड़कियों को मार दिया हो सकता है। kill -3 PIDप्रक्रिया को मार डाला और उसके बच्चों को सफलतापूर्वक दे मुझे postgres फिर से शुरू करते हैं।
पॉल मासरी-स्टोन

46

एक और संभावना यह है कि आपके पास एक सख्त शटडाउन था और पोस्टग्रेज की प्रक्रिया इसकी पीआईडी ​​फ़ाइल को साफ किए बिना मर गई। यह मेरे लिए तब होता है जब मेरे लैपटॉप की बैटरी मर जाती है।

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

तो अगर एक और प्रक्रिया - या कोई भी नहीं - उस पोर्ट पर चल रही है, तो बस पिड फ़ाइल को हटाएं, जैसे

rm /usr/local/var/postgres/postmaster.pid

और पोस्टग्रेट्स जल्द ही ठीक होने लगेंगे।

यह पता लगाने के लिए कि क्या उस पोर्ट पर कोई अन्य प्रक्रिया चल रही है, आप कर सकते हैं

ps wax | grep `head -1 /usr/local/var/postgres/postmaster.pid`

तो भागो

tail -f /usr/local/var/postgres/server.log 

यह देखने के लिए कि क्या यह काम करता है। तुम्हे देखना चाहिए

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 933) running in data directory "/usr/local/var/postgres"?
FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 933) running in data directory "/usr/local/var/postgres"?
LOG:  database system was interrupted; last known up at 2014-05-25 09:41:32 PDT
LOG:  database system was not properly shut down; automatic recovery in progress

(या कम से कम यही मैंने अभी-अभी ऊपर दिए गए :-) के बाद देखा था)

"


1
यह मेरे लिए मामला था। मेरे पास एक और प्रक्रिया संयोग से एक ही पीआईडी ​​पर चल रही थी क्योंकि postmaster.pidफ़ाइल इंगित कर रही थी। यह एक अशुद्ध शटडाउन (होमब्रे के माध्यम से ओएसएक्स पर पोस्टग्रेज की लैपटॉप स्थापना) के कई दिनों बाद था।
जेसी बुकानन

1
मेरा मैक लॉगिन स्क्रीन पर लटका हुआ है और मुझे इसे डाउन करना है। इसके बाद एक पोस्टमास्टर। पीआईडी ​​फ़ाइल को छोड़ दिया गया जो उस पीआईडी ​​को संदर्भित करता है जिसे अगले रिबूट पर कुछ और के लिए इस्तेमाल किया गया और पोस्टग्रेज नहीं आएंगे। मैंने पीआईडी ​​को मारने की कोशिश की (जैसे कि क्रेग-रिंगर द्वारा पोस्ट की सिफारिश की गई है), लेकिन इससे कोई फायदा नहीं हुआ। हालांकि, rm postmaster.pidमेरे लिए काम किया। मुझे कोई डेटा भ्रष्टाचार नहीं दिखता (लेकिन किसी भी मामले में, यह सिर्फ एक विकास मशीन है)।
स्टीवन चेनिन

मेरे लिए भी यही बात है। मैंने बिना लोकल रेल सर्वर को रोके अपना मैक बंद कर दिया था।
ब्रूनो पॉलिनो

1
जब भी ऐसा होता है मैं इस धागे पर वापस आता रहता हूं - क्योंकि मुझे कभी याद नहीं आता कि पिड फाइल कहां है, इसलिए मुझे हमेशा इसे देखना होगा: P
हैलो

यह मेरे साथ Postgres.app के साथ हुआ। हटाने के बाद ~/Library/Application Support/Postgres/data/postmaster.pidमैं उठा और फिर से चल पड़ा।
रोब जोहानसेन

8

मैंने इस बात की पूरी कोशिश की कि योसेमाइट में अपग्रेड करने के बाद मेरे पोस्टग्रेज (होमब्रे के जरिए स्थापित) को तोड़ दिया जाए।

फिर मैं इस ब्लॉग पोस्ट पर ठोकर खाई: http://ruckus.tumblr.com/post/100355276496/yosemite-upgrad-breaks-homebrew-installed-postgres

पहले मुझे उन लापता निर्देशिकाओं को बनाने की आवश्यकता थी जो अपग्रेड के दौरान स्पष्ट रूप से मिटा दिए गए थे (धन्यवाद Apple!)।

$ cd /usr/local/var/postgres

$ mkdir {pg_tblspc,pg_twophase,pg_stat_tmp}

तो बस फिर से शुरू करने के लिए फिर से शुरू करने का उपयोग कर सामान्य होमब्रेव सीक्वेंस:

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

मेरी समस्या को हल करने में मदद करने के लिए धन्यवाद हंगामा नोट्स। उम्मीद है कि यह आपकी मदद करता है।


4

हार्ड मरम्मत उपकरण

कड़ी रिबूट के बाद मेरे पास यही मुद्दा था। postmaster.pidफ़ाइल की पीड की जाँच करने के बाद , मैंने देखा कि मेरे पास कोई प्रक्रिया नहीं है। मैं .pid फ़ाइल को हार्ड डिलीट नहीं करना चाहता था, इसके बजाय मैंने pg-stopअपने द्वारा बनाए गए उपनाम का उपयोग किया था .bash_profile। यह उर्फ ​​बस चलाता है

pg_ctl -D /usr/local/var/postgres stop -s -m fast

सन्दर्भ के लिए

# psql
alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'

लॉग आउटपुट के बाद pg-stop

LOG:  database system was interrupted; last known up at 2016-04-25 10:51:08 PDT
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/274FA10
LOG:  redo is not required
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down
LOG:  database system was shut down at 2016-04-25 13:11:04 PDT

शराब बनाना

मैंने सोचा कि मुझे यहाँ यह भी उल्लेख करना चाहिए कि यदि आपने होमब्रे के साथ पोस्टग्रैस लगाए हैं तो आपको brew servicesएक नज़र देना चाहिए । अब मैं अपने डेटाबेस को शुरू / बंद करना पसंद करता हूं।

XXXXX:~ chris$ brew services list
Name       Status  User  Plist
mongodb    stopped
postgresql started chris /Users/chris/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
redis      started chris /Users/chris/Library/LaunchAgents/homebrew.mxcl.redis.plist

काढ़ा जानकारी बस मुझे क्या चाहिए था, धन्यवाद!
dnatoli

1

मुझे यह त्रुटि मिली, मुझे लगता है, मेरा कंप्यूटर दुर्घटनाग्रस्त हो गया। PostgreSQL इस त्रुटि के कारण भी शुरू नहीं कर सका इसलिए प्रक्रिया को मारना समाधान नहीं था। मैंने बस बैकअप लिया और फिर postmaster.pidफ़ाइल को हटा दिया और फिर त्रुटि बंद हो गई और पीजी फिर से शुरू करने में सक्षम था।


1

कभी-कभी विनम्र pg_ctl -w restartकर सकता है चाल :-)


प्यार जब शीर्ष उत्तर है, तो आप गलत हैं! कुछ भी नहीं! और फिर एक छोटी सी आज्ञा मुझे चलती है। (मेरे मामले में पीआईडी /usr/pgsql/9.3/data/postmaster.pidps ps में मौजूद नहीं था।)
नूमेनन

0

पोस्टमास्टर को हटाना.पिड वास्तव में हर बूट पर, आँख बंद करके करने के लिए एक बहुत ही सभ्य चीज़ है। यही मेरा सिस्टम करता है। क्योंकि आपने अभी-अभी बूट किया है, आप जानते हैं कि कोई पोस्टग्रेज प्रक्रिया नहीं चल रही है, और यदि आप एक अशुद्ध शटडाउन से उबर रहे हैं, तो यह फ़ाइल आपकी वसूली को रोक देगी।

Postgres के लिए एक बेहतर डिज़ाइन पोस्टमास्टर.पिड फ़ाइल को / रन फाइलसिस्टम में रखना होगा, इसलिए इसे हर रिबूट पर हटाए जाने की गारंटी है। कई अन्य सर्वर उस तरह से काम करते हैं।

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