14.04から16.04.1へのアップグレード後、Postgresqlサーバーが起動しない


24

システムを14.04からアップグレードしました。LTS 16.04.1 LTS、postgresqlはsystemdで起動しません:

/etc/init.d/postgresql start                                                                                                                                                                              
[ ok ] Starting 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 Вт 2016-08-09 13:40:51 MSK; 3min 23s ago
  Process: 23142 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
  Main PID: 23142 (code=exited, status=0/SUCCESS)Seems that 

systemdスクリプトに間違ったデータが含まれているようです:

# cat /lib/systemd/system/postgresql.service                                                                                                                                                                
# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on

[Install]
WantedBy=multi-user.target

postgresqlの正しいスクリプトは何ですか?

回答:


9

正しいバージョンとクラスター名を指定すると、これはそのまま使用できます。

バージョン9.5を実行しており、クラスターが呼び出されているとしましょうmain

開始: systemctl start postgresql@9.5-main

やめる: systemctl stop postgresql@9.5-main

状態: systemctl status postgresql@9.5-main

起動時に自動起動を有効にします。 systemctl enable postgresql@9.5-main

起動時に自動起動を無効にします。 systemctl disable postgresql@9.5-main

foo@postgres:~$ systemctl status postgresql@9.5-main
●  postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-03-31 17:44:46 CEST; 59s ago
   Main PID: 4546 (postgres)
   CGroup: /system.slice/system-postgresql.slice/postgresql@9.5-main.service
           ├ ─ 4546 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf
           ├ ─ 4548 postgres: checkpointer process
           ├ ─ 4549 postgres: writer process
           ├ ─ 4550 postgres: wal writer process
           ├ ─ 4551 postgres: autovacuum launcher process
           └ ─ 4552 postgres: stats collector process

Mar 31 17:44:44 postgres postgres[4546]: [1-2] 2017-03-31 17:44:44 CEST [4546] @ HINT:  Future log output will go to log destination "syslog".
Mar 31 17:44:44 postgres postgres[4547]: [2-1] 2017-03-31 17:44:44 CEST [4547] @ LOG:  database system was shut down at 2017-03-31 17:44:43 CEST
Mar 31 17:44:44 postgres postgres[4547]: [3-1] 2017-03-31 17:44:44 CEST [4547] @ LOG:  MultiXact member wraparound protections are now enabled
Mar 31 17:44:44 postgres postgres[4546]: [2-1] 2017-03-31 17:44:44 CEST [4546] @ LOG:  database system is ready to accept connections
Mar 31 17:44:44 postgres postgres[4551]: [2-1] 2017-03-31 17:44:44 CEST [4551] @ LOG:  autovacuum launcher started
Mar 31 17:44:45 postgres postgres[4553]: [3-1] 2017-03-31 17:44:45 CEST [4553] [unknown]@[unknown] LOG:  incomplete startup packet
Mar 31 17:44:46 postgres systemd[1]: Started PostgreSQL Cluster 9.5-main.
Mar 31 17:44:47 postgres systemd[1]: Reloading PostgreSQL Cluster 9.5-main.
Mar 31 17:44:47 postgres postgres[4546]: [3-1] 2017-03-31 17:44:47 CEST [4546] @ LOG:  received SIGHUP, reloading configuration files
Mar 31 17:44:47 systemd[1]: Reloaded PostgreSQL Cluster 9.5-main.

これが機能していることを証明できます。これを自動起動するようにsystemdをセットアップするにはどうすればよいですか?
アルトゥールエッセンブレナー

1
systemctl enable postgresql@9.5-mainは、あなたが必要とすることすべてです。
モルト

1
postgresqlを9.6から10.0にアップグレードしたところ、この問題が再び発生しました。ソリューションを試してみたところ、証明できます。
アルトゥールエシェンブレナー

以下のKeminの回答から抽出:たとえばsystemctl edit postgresql@9.6-main、次のようなsystemdディレクティブを使用してオーバーライドファイルを作成できます。[Service] Nice = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper

14

Systemdはからのスクリプトを使用する必要があります/etc/init.d。代わりに、systemdは何らかのテンプレートファイルを使用します。これを修正するには、次の手順を実行します。

  1. 無効なサービススクリプトを削除します。

    # rm /lib/systemd/system/postgresql.service

  2. デーモンスクリプトをリロードします。

    # systemctl daemon-reload

  3. postgresqlサービスを有効にします。

    # systemctl enable postgresql

:その後、あなたは、任意の好ましい変形ではpostgresを起動することができるだろうsudo systemctl start postgresqlsudo service postgresql startまたはsudo /etc/init.d/postgresql start。postgresqlが実際に実行されていることを確認するには、サービスのステータスを確認してください:sudo systemctl status postgresql。次のようになります。

% sudo systemctl status postgresql                                                                                                                                                                          
● postgresql.service - LSB: PostgreSQL RDBMS server
   Loaded: loaded (/etc/init.d/postgresql; bad; vendor preset: enabled)
   Active: active (running) since Пт 2016-08-12 10:13:43 MSK; 1h 37min ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/postgresql.service
           ├─4086 /usr/lib/postgresql/9.5/bin/postgres -D     /var/lib/postgresql/9.5/main -c  config_file=/etc/postgresql/9.5/main/postgresql.conf
           ├─4099 postgres: checkpointer process                                                                                              
           ├─4100 postgres: writer process                                                                                                    
           ├─4101 postgres: wal writer process                                                                                                
           ├─4102 postgres: autovacuum launcher process                                                                                       
           └─4103 postgres: stats collector process                                                                                           

авг 12 10:13:40 ubuntu-precise systemd[1]: Starting LSB: PostgreSQL RDBMS server...
авг 12 10:13:40 ubuntu-precise postgresql[4009]:  * Starting PostgreSQL 9.5 database server
авг 12 10:13:43 ubuntu-precise postgresql[4009]:    ...done.
авг 12 10:13:43 ubuntu-precise systemd[1]: Started LSB: PostgreSQL RDBMS server.

1
それは間違っているはずです。Systemd 動作します。9.3クラスターを正常に起動しています。9.5クラスターが起動しないだけです。そうではありません、無効なそれはだ、サービススクリプトターゲット、彼らが呼んでいることを、スクリプトのサービスを、それがリロードにします。Uいハックもそれを行う正しい方法ではないようですが、実際systemctl _action_ postgresql@_version_に実行する必要があります
Auspex

これがいハックかどうかはわかりませんが(おそらくそうです)、postfixでも同じ問題があり、この答えは私の問題を解決しているようです。
デシバイト

systemctlでpostgresqlを有効にすると、次のエラーが発生しました:postgresql.serviceはネイティブサービスではなく、systemd-sysv-installにリダイレクトします拒否されたinsserv:fopen(.depend.stop):許可が拒否されました。どうやらこれは私の設定では機能していません。
ケミン周

1

postges9を削除した後も同じ問題が発生し、ubuntu16に10をインストールしました。最初に、/ lib / systemd / system / postgresql.serviceファイルを次の内容で編集しました。

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=notify
User=postgres
ExecStart=/usr/lib/postgresql/10/bin/postgres -D /analysis2/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target

そして、systemctl restart / stop / startを使用してpostgresqlサービスを制御できます。ただし、何らかの理由で、上記のファイルが上書きされ(おそらくシステム更新後)、systemctlコマンドを実行してpostgresqlサーバーを起動および停止できなくなりました。少し読んだ後、上記のファイルを編集することになっていないことに気付きました。代わりに、systemctl edit fooを使用してデフォルトを上書きする必要があります。次のリンクで提案されている解決策に従った後、私のシステムはpostgresqlで適切に動作しているようです。

systemdサービスをオーバーライドまたは構成するにはどうすればよいですか?


-2

最も良い解決策ではありませんが、これは何にも飛び込むことなく問題を解決します。これをcronに追加します:

@reboot sleep 5; systemctl start postgresql
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.