Postgresql सर्वर प्रारंभ नहीं होता है


14

[उबंटू 16.04] मैंने निर्भरता के साथ 9.5 पोस्टग्रेस्कल स्थापित किया है:

sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev

जब मैं दौड़ना चाहता हूं psqlतो मुझे मिलता है:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

लेकिन /var/run/postgresql/खाली है। जब मैं पुनः आरंभ करता हूं तो सब कुछ ठीक प्रतीत होता है:

$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.

$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
  Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
  Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 3523 (code=exited, status=0/SUCCESS)

लेकिन अगर जाँच ps auxऐसी पीआईडी ​​नहीं है (क्यों ??)

कुल बहाली में मदद नहीं करता है। मेरे द्वारा यह कैसे किया जा सकता है?


/Var/log/posgtresql/postgresql-9.5-main.log फ़ाइल क्या दिखाता है?
ubfan1

यह फाइल खाली है
mike927

जवाबों:


14

यह क्निअल में PostgreSQL के सिस्टमड इंटीग्रेशन का एक आइडिओसिंक्रैसी है।

Postgresql- आम पैकेज द्वारा स्थापित पोस्टग्रैस्कल सेवा इकाई सिर्फ एक डमी सेवा है जो वास्तविक सेवा postgresql@9.6-main को एक निर्भरता के माध्यम से शुरू करने का कारण बनती है। आप कमांड चलाकर उस निर्भरता को देख सकते हैं

systemctl list-dependencies postgresql

यह निर्भरता स्थायी नहीं होती है, लेकिन सिस्टम बूट द्वारा सिस्टम बूट के दौरान उत्पन्न होती है /lib/systemd/system-generators/postgresql-generatorजो पोस्टग्रैस्क्ल-कॉमन पैकेज के साथ भी आती है। जनरेटर यह जाँचता है कि क्या फ़ाइल में स्टार्टअप मोड /etc/postgresql/9.6/main/start.confसेट है auto, और यदि ऐसा है, तो निर्भरता सेट करता है जो बाद में 9.6-मेन को शुरू करने का कारण बनता है।

(अधिक सटीक रूप से, यह सभी कॉन्फ़िगरेशन उपनिर्देशिकाओं की जाँच करता है /etc/postgresql/*/*और स्वचालित स्टार्टअप के लिए कॉन्फ़िगर किए गए सभी उदाहरणों के लिए निर्भरता पैदा करेगा, लेकिन एक डिफ़ॉल्ट स्थापना में सिर्फ एक उदाहरण होगा।)

सिस्टमैड जनरेटर की सीमाओं के कारण (देखें man systemd.generator) यह प्रक्रिया विफल हो सकती है, जिससे रिबूट के बाद निर्भरता अनुपस्थित हो सकती है। Systemd तब केवल डमी सेवा, लेखन शुरू करेगा

systemd[1]: Starting PostgreSQL RDBMS...
systemd[1]: Started PostgreSQL RDBMS.

लॉग करने के लिए, लेकिन अन्यथा कुछ भी नहीं। मैन्युअल रूप से सेवा शुरू करने का प्रयास कर रहा है

systemctl start postgresql

बस उस परिणाम को पुन: उत्पन्न करेगा। आज्ञा चलाना

systemctl daemon-reload

मैन्युअल रूप से रूट जनरेटर को फिर से चलाएगा और ज्यादातर मामलों में अगले रिबूट तक समस्या को ठीक करेगा।

समस्या को स्थायी रूप से हल करने के लिए आपको कारण ढूंढना होगा कि बूट के दौरान जनरेटर विफल क्यों होता है। संभावित कारणों को systemd.generator मैनपेज में पाया जा सकता है। मेरे मामले में यह PostgreSQL कॉन्फिग फाइल थी /etc/postgresql/9.6/main/postgresql.confजो कि एक अलग फाइल सिस्टम के लिए सीलिंक की गई थी जो तब तक उपलब्ध नहीं थी जब जनरेटर बूट के साथ जल्दी चलता था। postgresql-generatorउस फ़ाइल के अस्तित्व की जाँच करता है, भले ही उसे अन्यथा इसकी आवश्यकता न हो।


जब आप इस मुद्दे को हल करने का प्रबंधन करते हैं तो अपने जवाब को संपादित करने के लिए स्वतंत्र महसूस करें :)
तूफान

9

तिलमन के उत्तर पर विस्तार, लेकिन टिप्पणी करने के लिए पर्याप्त यश नहीं ...

यदि आपको पोस्टग्रेजेकल नामक सेवा की आवश्यकता नहीं है और रैपर डमी सेवा की परवाह नहीं है, तो इसे सीधे वास्तविक सेवा को नियंत्रित करने के लिए काम करना चाहिए। यह नाम है: postgresql@$version-$cluster.service आपके मामले में यह पोस्टग्रैसेक्ल-9.5- संक्षेप में मुख्य होना चाहिए । शुरू करना पसंद है

systemctl start postgresql@9.5-main

और रोकने के लिए:

systemctl stop postgresql@9.5-main

स्टेटस आपको ऑटो जनरेट रैपर सर्विस की तुलना में बहुत बेहतर और सटीक जानकारी देगा।

systemctl status postgresql@9.5-main

9.6 के लिए यह इस तरह दिखता है:

● postgresql@9.6-main.service - PostgreSQL Cluster 9.6-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-09-13 00:41:50 CEST; 7h ago
  Process: 10235 ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop (code=exited, status=2)
  Process: 10676 ExecStart=postgresql@%i --skip-systemctl-redirect %i start (code=exited, status=0/SUCCESS)
 Main PID: 10683 (postgres)
   CGroup: /system.slice/system-postgresql.slice/postgresql@9.6-main.service
           ├─10683 /usr/lib/postgresql/9.6/bin/postgres -D /var/lib/postgresql/9.6/main -c config_file=/etc/postgresql/9.6/main/postgresql.conf
           ├─10685 postgres: 9.6/main: checkpointer process
           ├─10686 postgres: 9.6/main: writer process
           ├─10748 postgres: 9.6/main: wal writer process
           ├─10749 postgres: 9.6/main: autovacuum launcher process
           ├─10750 postgres: 9.6/main: archiver process   last was 000000020000000000000082
           ├─10751 postgres: 9.6/main: stats collector process

4

मेरे मामले में यह गलत तरीके से कॉन्फ़िगर किए गए स्थानों से संबंधित था।

मैंने इस dba.stackexchange.com उत्तर में समाधान ढूंढ लिया है :

  1. sudo dpkg-reconfigure localesआवश्यक स्थानों को उत्पन्न करने के लिए उपयोग करें
  2. मौजूदा डेटाबेस क्लस्टर को ड्रॉप करें sudo pg_dropcluster 9.5 main(यह क्लस्टर के सभी डेटा को मिटा देगा!)
  3. के माध्यम से क्लस्टर फिर से बनाएँ sudo pg_createcluster 9.5 main --start
  4. PostgreSQL के माध्यम से पुनरारंभ करें sudo service postgresql restart

1

ubuntu 16.04 के साथ सिस्टमड स्टार्टअप स्क्रिप्ट का उपयोग करना बेहतर होगा, इन दिनों स्क्रिप्ट ठीक से काम नहीं कर सकती है। 9.5 पोस्टग्रब्स पहले से ही ubuntu repos में है इसलिए कोशिश करें कि इसके बजाय, इसमें सिस्टमड स्टार्टअप होना चाहिए।


मानक ubuntu repo के उपयोग से मुझे एक ही परिणाम मिलता है
mike927

शर्म की बात है, लगता है जैसे लोगों को अभी तक सिस्टमड का लटका नहीं मिला है। आपको संभवतः पोस्टग्रेज पैकेज के खिलाफ बग को उठाना चाहिए या सिस्टम समर्थन के बारे में उनकी मेलिंग सूची पर पूछना चाहिए। मैं पोस्टग्रेज का ज्यादा इस्तेमाल नहीं करता हूं, लेकिन कुछ ओपन सोर्स प्रोजेक्ट्स ने सिस्टमड के खिलाफ रुख अपनाया है या हो सकता है कि इसे समर्थन देने के बारे में आंतरिक बहस में उलझ गए हों।
आमिया

जब मैं systemctl चलाता हूं तो यह "postgresql@9.5-main.service लोड किया हुआ विफल हो जाता है, पोस्टग्रेएसक्यूएल क्लस्टर 9.5-मुख्य"। यह विफल क्यों है?
माइक 927

अच्छी तरह से इस मामले में यह प्रणालीगत स्टार्टअप स्क्रिप्ट है जो ठीक से काम नहीं करती है इसलिए सलाह बिल्कुल मददगार नहीं है।
तिलमैन

1

एक और "इससे काटा गया"।

pg_upgradeclusterवास्तव में पोर्ट 5432 पर पोर्ट 5433 और स्रोत संस्करण (9.5) पर "मैन्युअल" मोड में लक्ष्य संस्करण (9.6) को छोड़ दिया।

के बाद भी pg_dropcluster 9.5। Start.conf फ़ाइल को संपादित करने से मदद नहीं मिली, लेकिन संकेत का उपयोग करना था systemctl daemon-reload, क्योंकि जनरेटर इस कॉन्फ़िगरेशन फ़ाइल के आधार पर निर्णय लेता है कि क्या सेवा फ़ाइल को सिमिलिंक करना है:

for conf in /etc/postgresql/*/*/postgresql.conf; do
    # trimmed for brevity
    [ "$start" = "auto" ] || continue
    ln -s "$pgservice" "$wantdir/postgresql@$version-$cluster.service"
done

इसलिए यदि आप जो क्लस्टर शुरू करना चाहते हैं, उसमें start.conf में "ऑटो" शब्द नहीं है, तो आपको बूट समय पर सक्षम होने के लिए एक सिस्टम-रीलोड (या रिबूट) करने की आवश्यकता है।

अभी भी इसे रिबूट के साथ सत्यापित करना है, लेकिन उपरोक्त अति आत्मविश्वास को देखते हुए यह मुद्दा था।


1

मैंने इस तरह से जादू "सुपर सर्विस" को निष्क्रिय कर दिया:

root@server# systemctl disable postgresql

तब मैंने कंक्रीट सेवा को सक्रिय किया:

root@server:~# systemctl enable postgresql@9.5-main.service 

रिबूट करने के बाद सब कुछ फिर से काम किया।



0

एक अलग कारण से मुझे यह समस्या थी: निर्देशिका अनुमतियाँ। मैं इस तरह एक पूर्ण झाडू था:

chmod -R 644 /etc/postgresql/10/main

यह निर्देशिका को गैर-निष्पादन योग्य के रूप में सेट करता है, जो पोस्टग्रेज को पढ़ने से रोकता है।


0

मुझे ssl-cert-snakeoil.key अनुमति के साथ समस्या की जाँच करने पर यही समस्या थी।

स्वामित्व सेट करें

chown root: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key

और एक साफ पुनः आरंभ किया।

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