"FATAL: লক ফাইল" postmaster.pid "ইতিমধ্যে বিদ্যমান"


68

আমি স্রেফ পোস্টগ্রিসের মাধ্যমে পুনরায় ইনস্টল করেছি 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 ইনস্টল করেছেন এবং চলমান সার্ভারটি বন্ধ না করেই আপনি ডেটা ডিরটিকে মুছলেন। সুতরাং আপনার কাছে এখন কিছু অনাথ পোস্টগ্রাইএসকিউএল সার্ভার প্রক্রিয়া রয়েছে যা মুছে ফেলা হয়েছে এমন ডেটা ফাইল পরিচালনা করছে, সুতরাং এগুলি ফাইল সিস্টেমে আর অ্যাক্সেসযোগ্য নয় এবং যখন তাদের কাছে সর্বশেষ উন্মুক্ত ফাইল হ্যান্ডেল বন্ধ হয়ে যায় তখন পুরোপুরি মুছে ফেলা হবে। আপনি pg_ctlস্বাভাবিকের মতো সার্ভারটি বন্ধ করতে ব্যবহার করতে পারবেন না কারণ আপনি ক্লাস্টার ডাটাডির মুছে ফেলেছেন, তাই আপনাকে অবশ্যই প্রক্রিয়াগুলি মেরে ফেলতে হবে। পোস্টমাস্টারকে হত্যা করুন ( ব্যবহার করবেন নাkill -9 , কেবল একটি সাধারণ কিল করবে) এবং বাকীটিও বন্ধ হয়ে যাবে।

এরপরে আপনি নতুনভাবে initdbডেটা বিপরীতে ডেটাডির একটি নতুন সার্ভার শুরু করতে সক্ষম হবেন ।

আপনি পোস্টগ্র্রেএসকিউএল এর অন্যান্য পুরানো সংস্করণটি আনইনস্টল না করলেই আপনি ট্র্যাকের বিরোধের মুখোমুখি হওয়ার খুব সম্ভবত সম্ভাবনা রয়েছে।

সংক্ষেপে:

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

প্রথম লাইন নম্বর, যা লিখে PID পোস্টমাস্টার করুন।

psপিডিটি পোস্টগ্রিস পোস্টমাস্টারের সাথে যাচাই করুন ।

নিম্নলিখিত কমান্ডের সাথে পোস্টমাস্টার প্রক্রিয়াটি মেরে ফেলুন, 'পিআইডি' এর পরিবর্তে আপনি উল্লিখিত নম্বরটি দিয়ে। আবার, ব্যবহার করবেন না kill -9বা kill -KILL, কেবল একটি সমতল ব্যবহার করুন kill, যেমনSIGTERM :

kill PID

যদি পিডটি কোনও পোস্টগ্রিস পোস্টমাস্টারের মতো না হয় তবে ম্যানুয়ালি এমন killকোনও postgresব্যাকেন্ড যা এখনও চলছে, যাচাই করুন যে সেগুলি আর চলছে না এবং কেবল তখনই মুছে ফেলুন postmaster.pid। (আপনাকে অবশ্যই যাচাই করতে হবে যে postmaster.pidভাগ করা স্টোরেজে নেই যেখানে সার্ভারটি অন্য কোনও ভিএম / হোস্টে চলতে পারে)।


এই আমার জন্য কাজ!
টোন

এইটা কাজ করে. আমি যেখানে আমার ট্র্যাশ খালি করে দিয়েছি এমন একটি সমস্যা হয়েছিল এবং মনে হয় কিছু ডেটা ফাইল সম্ভবত সেখানে ছিল ... কীভাবে তা নিশ্চিত নয় তবে সেগুলি ছিল। একবার আমি পুরানো প্রক্রিয়াটি মেরে ফেললাম এটি ঠিকঠাক কাজ করেছিল।
ড্যান এল

হাঁ। যে স্পট ছিল।
আমোস ফোলারিন

7
এটি উল্লেখ করা উচিত যে হার্ড ক্র্যাশের পরে পিআইডি ফাইলটি বেঁচে থাকতে পারে, প্রক্রিয়াটি মারা যায়। সেক্ষেত্রে পিআইডি ফাইলের পিআইডি এমন একটি প্রক্রিয়াতে নির্দেশ করতে পারে যা পোস্টগ্রিসের সাথে কিছুই করার থাকে না। এই মামলার দ্বিতীয় উত্তর দেখুন।
জোর করে

2
একটি সমতল kill PIDআমার পক্ষে কাজ করে না। আমার প্রয়োজন kill -3 PID। আমার ক্ষেত্রে আমি একটি শাটডাউন করেছি যা প্রক্রিয়াগুলি যথাযথভাবে বন্ধ না করেই টার্মিনাল উইন্ডোজকে হত্যা করেছে। kill -3 PIDপ্রক্রিয়া নষ্ট হয়েছে এবং তার সন্তানদের সফলভাবে আমাকে postgres আবার শুরু করুন।
পল মাস্রি-স্টোন

46

আর একটি সম্ভাবনা হ'ল আপনার একটি শক্ত শাটডাউন হয়েছিল এবং পোস্টগ্রিজ প্রক্রিয়াটির পিড ফাইলটি পরিষ্কার না করেই মারা গেছে। আমার ল্যাপটপের ব্যাটারি মারা গেলে আমার সাথে এটি ঘটে।

এই সমাধানটি কোনও প্রোডাকশন সিস্টেমের জন্য নয় , এবং আপনার সত্যিকারের নিশ্চিত হওয়া উচিত যে পোস্টগ্রিস ডিমন চলছে না , তবে আমি কোডিংয়ের জন্য আমার ল্যাপটপটি ব্যবহার করি এবং আমার ডেটাবেসগুলি পুনরায় তৈরি করার প্রয়োজনে আমি উদ্বিগ্ন নই।

সুতরাং যদি অন্য কোনও প্রক্রিয়া - বা কিছুই নয় - সেই বন্দরে চলছে, কেবল পিড ফাইলটি মুছুন, যেমন

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

এবং postgres শীঘ্রই সূক্ষ্ম শুরু হবে।

সেই বন্দরে আর কোনও প্রক্রিয়া চলছে কিনা তা জানতে, আপনি এটি করতে পারেন

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

(বা কমপক্ষে এটি আমি ঠিক উপরেটি করার পরে দেখেছি :-))

(এবং সত্যই, পোস্টগ্রিসকে বুঝতে এতটুকু স্মার্ট হওয়া উচিত নয় যে পিআইডি 933 নিয়ে কোনও প্রক্রিয়া নেই এবং নিজে থেকে বোগাস পিড ফাইলটি সরিয়ে ফেলতে হবে?)


1
এটা আমার ক্ষেত্রে ছিল। postmaster.pidফাইলটি ইশারা করার সাথে সাথে আমার আরও একটি প্রক্রিয়া কাকতালীয়ভাবে একই পিআইডি-তে চলছে । এটি অশুভ শাটডাউনের বেশ কয়েকটি দিন পরে (হোমব্রিউয়ের মাধ্যমে ওএসএক্সে পোস্টগ্রিসের ল্যাপটপ ইনস্টলেশন)।
জেসি বুচানন

1
আমার ম্যাক লগইন স্ক্রিনে ঝুলিয়ে রেখেছিল এবং আমাকে এটি ডাউন করতে হয়েছিল। এটি শেষ হয়ে গেছে একটি পোস্টমাস্টার.পিড ফাইলের চারপাশে যা পিআইডি রেফারেন্স করে যা পরবর্তী রিবুটটিতে অন্য কোনও কিছুর জন্য ব্যবহৃত হয় এবং পোস্টগ্রাগুলি আসে না। আমি পিআইডি হত্যার চেষ্টা করেছি (ক্রেগ-রিঞ্জার দ্বারা পোস্টের মতো প্রস্তাবিত), তবে তাতে কোনও লাভ হয়নি। তবে rm postmaster.pidআমার পক্ষে কাজ করেছেন। আমি কোনও ডেটা দুর্নীতি দেখছি না (তবে যে কোনও ক্ষেত্রে এটি কেবল একটি উন্নয়ন যন্ত্র)।
স্টিভেন চানিন 25'16

আমার জন্য একই জিনিস। আমি স্থানীয় রেল সার্ভারটি বন্ধ না করেই আমার ম্যাকটি বন্ধ করে দিয়েছিলাম।
ব্রুনো পাউলিনো

1
যখনই এটি ঘটে আমি এই থ্রেডে ফিরে আসছি - কারণ
পিড

পোস্টগ্রিস.অ্যাপের সাথে আমার এই ঘটনা ঘটেছে। মুছে ফেলার পরে ~/Library/Application Support/Postgres/data/postmaster.pidআমি আবার চলছিলাম।
রব

8

আমি ইউসেমাইটে আপগ্রেড করার পরে আমার পোস্টগ্রাগগুলি (হোমব্রিউয়ের মাধ্যমে ইনস্টল করা) ভেঙে কোনও লাভ হয়নি।

তারপরে আমি এই ব্লগ পোস্টটিতে হোঁচট খেয়েছি : http://ruckus.tumblr.com/post/100355276496/yosemite-upgrade-breaks-homebrew-installed-postgres

প্রথমে আমার অনুপস্থিত ডিরেক্টরিগুলি তৈরি করার দরকার ছিল যা আপগ্রেড করার সময় দৃশ্যত নিশ্চিহ্ন হয়ে গিয়েছিল (ধন্যবাদ অ্যাপল!)

$ 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

আমি এই ত্রুটিটি পরে পেয়েছি, আমার ধারণা, আমার কম্পিউটার ক্র্যাশ হয়ে গেছে। পোস্টগ্র্রেএসকিউএল এমনকি এই ত্রুটির কারণে শুরুও করতে পারেনি তাই প্রক্রিয়াটি হত্যার সমাধান ছিল না। আমি কেবল ব্যাক-আপ করেছি এবং তারপরে postmaster.pidফাইলটি মুছলাম এবং তারপরে ত্রুটি বন্ধ হয়ে গেল এবং পিজি আবার শুরু করতে সক্ষম হয়েছিল।


1

কখনও কখনও pg_ctl -w restartনম্ররা কৌশলটি করতে পারে :-)


শীর্ষ উত্তর যখন আপনি ডুমেড হন তখন ভালোবাসুন! কিছুই স্পর্শ করুন! এবং তারপরে একটি ছোট্ট কমান্ড আমাকে চালিত করে। (আমার ক্ষেত্রে /usr/pgsql/9.3/data/postmaster.pid
পিড

0

পোস্টমাস্টার.পিড মুছে ফেলা আসলে অন্ধভাবে প্রতিটি বুটে করার জন্য একটি সত্যই শালীন কাজ। আমার সিস্টেম এটিই করে। যেহেতু আপনি সবেমাত্র বুট আপ করেছেন, আপনি জানেন যে কোনও পোস্টগ্রিস প্রক্রিয়া চলছে না এবং আপনি যদি কোনও অশুচি শাটডাউন থেকে সেরে উঠছেন তবে এই ফাইলটি সেখানে আপনার পুনরুদ্ধারকে আটকাবে।

পোস্টগ্র্রেসের জন্য আরও ভাল নকশা হ'ল পোস্টমাস্টার.পিড ফাইলটি / রান ফাইল সিস্টেমের মধ্যে রাখা, তাই এটি প্রতিটি রিবুটে মুছে ফেলার গ্যারান্টিযুক্ত। অন্যান্য অনেক সার্ভার সেভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.