PostgreSQL 10 instalado por um usuário normal.
Habilitado e iniciado seu serviço:
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
Em seguida, faça o login com postgres
o usuário:
sudo su - postgres
Adicione esta configuração ao .bash_profile
arquivo:
export PATH=$PATH:/usr/pgsql-10/bin/
Reinicie o PostgreSQL por pg_ctl
:
-bash-4.2$ pg_ctl restart
Em seguida, saia para o usuário normal e verifique o status do postgresql novamente, ele falhou. Mesmo usar esta maneira de reiniciar não pode ter sucesso:
sudo systemctl restart postgresql-10
sudo systemctl stop postgresql-10
Sempre failed
.
Mas se eu usar postgres
o usuário para testar reiniciar, parar, iniciar, todos eles podem ter sucesso.
Essas 2 maneiras não estão controlando o mesmo processo?
Adicionar conteúdo de serviço postgresql-10
$ sudo systemctl cat postgresql-10.service
# /usr/lib/systemd/system/postgresql-10.service
# It's not recommended to modify this file in-place, because it will be
# overwritten during package upgrades. If you want to customize, the
# best way is to create a file "/etc/systemd/system/postgresql-10.service",
# containing
# .include /usr/lib/systemd/system/postgresql-10.service
# ...make your changes here...
# For more info about custom unit files, see
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F
# Note: changing PGDATA will typically require adjusting SELinux
# configuration as well.
# Note: do not use a PGDATA pathname containing spaces, or you will
# break postgresql-setup.
[Unit]
Description=PostgreSQL 10 database server
Documentation=https://www.postgresql.org/docs/10/static/
After=syslog.target
After=network.target
[Service]
Type=notify
User=postgres
Group=postgres
# Note: avoid inserting whitespace in these Environment= lines, or you may
# break postgresql-setup.
# Location of database directory
Environment=PGDATA=/var/lib/pgsql/10/data/
# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog
# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0
ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA}
ExecStart=/usr/pgsql-10/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0
[Install]
WantedBy=multi-user.target
Se você iniciar o servidor manualmente usando
pg_ctl
,systemd
não sabe disso.Ele tentará alegremente iniciar o servidor, o que falhará (porque o servidor já está em execução) e não poderá parar o servidor, porque não sabe que está em execução.
Portanto, use sempre
systemctl
ao iniciar e interromper o serviço. Recarregar compg_ctl reload
é bom.