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 

시스템 스크립트에 잘못된 데이터가 포함 된 것 같습니다 :

# 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를 어떻게 설정합니까?
Artur Eshenbrener

1
systemctl enable postgresql@9.5-main당신이 필요한 전부입니다.
malte

1
postgresql을 9.6에서 10.0으로 업그레이드 하고이 문제를 다시 해결하십시오. 솔루션을 시험해 보았고 입증 할 수 있습니다.
Artur Eshenbrener

아래 Kemin의 답변에서 발췌 : 예 systemctl edit postgresql@9.6-main를 들어 다음과 같은 체계적 지시문으로 재정의 파일을 만들 수 있습니다 . [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

그 후, 당신은 어떤 선호하는 변종 포스트 그레스를 시작할 수있을 것입니다 : sudo systemctl start postgresql, sudo 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 클러스터를 시작하지 않습니다. 유효하지 않은 서비스 스크립트 가 아니며 대상 스크립트이며 서비스 를 다시로드 할 수 있도록 호출 했습니다. 추악한 해킹도 올바른 방법으로 보이지는 않지만 실제로 systemctl _action_ postgresql@_version_실행 되어야 합니다.
Auspex

이것이 추악한 해킹인지는 모르겠지만 (아마도) postfix 와 동일한 문제가 있었으며이 답변은 내 문제를 해결하는 것으로 보입니다.
decibyte

systemctl enable postgresql에서 다음 오류가 발생했습니다. postgresql.service는 네이티브 서비스가 아니며 systemd-sysv-install로 리디렉션합니다. insserv 거부 : fopen (.depend.stop) : 권한이 거부되었습니다. 분명히 이것은 내 설정에서 작동하지 않습니다.
Kemin Zhou

1

postges9를 제거 한 후 동일한 문제가 발생했으며 우분투 16에 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 서비스를 제어 할 수 있습니다. 그러나 어떤 이유로 위의 파일을 덮어 썼고 (시스템 업데이트 후) postgresql 서버를 더 이상 시작하고 중지하기 위해 systemctl 명령을 실행할 수 없습니다. 약간의 독서 후에, 나는 당신이 위의 파일을 편집해서는 안된다는 것을 깨달았습니다. 대신 systemctl edit foo를 사용하여 기본값을 덮어 써야합니다. 다음 링크에서 제안한 솔루션을 따른 후 시스템이 postgresql과 올바르게 작동하는 것 같습니다.

시스템 서비스를 재정의하거나 구성하려면 어떻게합니까?


-2

가장 좋은 해결책은 아니지만 아무 것도 들어 가지 않고 문제를 해결합니다. 이것을 cron에 추가하십시오 :

@reboot sleep 5; systemctl start postgresql
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.