PostgreSQL inicio automático no fedora [RESOLVIDO]

1. PostgreSQL inicio automático no fedora [RESOLVIDO]

Matheus Saraiva da Silva
matheusssilva

(usa Fedora)

Enviado em 26/11/2013 - 11:57h

Instalação tudo normal, eu consigo estartar o serviço com: pg_ctl. Também consigo adicionar o serviço para iniciop automático com: systemctl enable postgresql.service, só que o serviço não inicia. Quando eu listo os serviços o postgresql aparece com falha na inicialização.
O que eu fiz de diferente na instalação foi informar a localização da pasta data com: -D /minhapasta/data


  


2. MELHOR RESPOSTA

Buckminster
Buckminster

(usa Debian)

Enviado em 26/11/2013 - 16:36h

Você tem algum serviço de segurança, tipo SELinux? Se tiver, o postmaster não pode acessar o .conf, desabilite a segurança do serviço Postgresql.

3. Re: PostgreSQL inicio automático no fedora [RESOLVIDO]

Matheus Saraiva da Silva
matheusssilva

(usa Fedora)

Enviado em 26/11/2013 - 15:31h

Erro

systemctl status postgresql.service


postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled)
Active: failed (Result: exit-code) since Ter 2013-11-26 14:58:00 FNT; 6min ago
Process: 912 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=1/FAILURE)
Process: 896 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)

Nov 26 14:57:55 localhost.localdomain systemd[1]: Starting PostgreSQL database server...
Nov 26 14:57:55 localhost.localdomain pg_ctl[912]: postgres não pode acessar o arquivo de configuração do servidor "/pgsql/data/postgre... negada
Nov 26 14:58:00 localhost.localdomain pg_ctl[912]: pg_ctl: não pode iniciar o servidor
Nov 26 14:58:00 localhost.localdomain systemd[1]: postgresql.service: control process exited, code=exited status=1
Nov 26 14:58:00 localhost.localdomain systemd[1]: Failed to start PostgreSQL database server.
Nov 26 14:58:00 localhost.localdomain systemd[1]: Unit postgresql.service entered failed state.




Resolvi também modificar manualmente as configurações de inicialização contidas no arquivo: postgresql.service, localizado na pasta: /usr/lib/systemd/system/



[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking

User=postgres
Group=postgres

# Port number for server to listen on
Environment=PGPORT=5432

# Location of database directory
#Environment=PGDATA=/var/lib/pgsql/data
Environment=PGDATA=/pgsql/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

ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA}
ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/bin/pg_ctl reload -D ${PGDATA} -s

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

[Install]
WantedBy=multi-user.target



Modifiquei a linha Environment=PGDATA=/var/lib/pgsql/data e coloquei a pata de dados que configurei quando criei o cluster. Environment=PGDATA=/pgsql/data

Antes de eu modificar a linha o erro que eu recebia com o comando: systemctl status, era: No such file or directory.

Pelo que percebo, parece ser um problema de permisão de acesso. Porém, já tentei até liberar geral (777) na pasta pgsql/data, mesmo assim o erro é o mesmo.



4. Re: PostgreSQL inicio automático no fedora [RESOLVIDO]

Matheus Saraiva da Silva
matheusssilva

(usa Fedora)

Enviado em 26/11/2013 - 17:32h

So você mesmo em brother..... :)

postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled)
Active: active (running) since Ter 2013-11-26 17:27:27 FNT; 16s ago
Process: 1038 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
Process: 1032 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 1042 (postgres)
CGroup: name=systemd:/system/postgresql.service
├─1042 /usr/bin/postgres -D /pgsql/data -p 5432
├─1043 postgres: logger process
├─1045 postgres: checkpointer process
├─1046 postgres: writer process
├─1047 postgres: wal writer process
├─1048 postgres: autovacuum launcher process
└─1049 postgres: stats collector process

Nov 26 17:27:26 localhost.localdomain systemd[1]: Starting PostgreSQL database server...
Nov 26 17:27:27 localhost.localdomain systemd[1]: Started PostgreSQL database server.



vim /etc/selinux/config

#SELINUX=enforcing
SELINUX=disabled


Mas desabilitar SELINUX é aconselhavel?


5. Re: PostgreSQL inicio automático no fedora [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 26/11/2013 - 18:12h

Desabilite somente para o Postgre. Apesar de que eu sempre desabilitava todo o SELinux e nunca tive problemas. Uso o Iptables puro e simples.

http://wiki.hackstore.com.br/index.php?title=Desabilitando_SELinux_na_fam%C3%ADlia_de_distros_basead...


6. Re: PostgreSQL inicio automático no fedora [RESOLVIDO]

Matheus Saraiva da Silva
matheusssilva

(usa Fedora)

Enviado em 27/11/2013 - 08:55h

Como eu libero o posrgres no SELinux?
Dei uma lida rápida em uma doc mas me pareceu muito confusa.


7. Re: PostgreSQL inicio automático no fedora [RESOLVIDO]

Matheus Saraiva da Silva
matheusssilva

(usa Fedora)

Enviado em 27/11/2013 - 09:44h

Nas RHEL distros. O diretório padrão para os arquivos do cluster PostgreSQL fica em: /var/lib/pgsql/data. Por default esse diretório já vem definido com um rótulo do tipo postgresql_db_t. Esse tipo é entendido pelo SELinux como sendo o local dos arquivos de dados do postgres e assim ele libera o acesso para o postmaster.
Como eu havia mudado o local dos dados, eu precisava definir o rótulo (não sei se essa definição está certa) postgresql_db_t para o novo local. Para isso usei o comando:

sudo semanage fcontext -a -t postgresql_db_t "/pgsql(/.*)?" 


Que define o novo tipo (postgresql_db_t) para o diretório em questão. Após isso bastou aplicar com:

sudo restorecon -R -v /pgsql/ 


Reativei o SELinux e o postgresSQL funcionou redondo.

Fontes:

http://docs.fedoraproject.org/en-US/Fedora/13/html/Managing_Confined_Services/sect-Managing_Confined...

http://docs.oracle.com/cd/E37670_01/E36387/html/ol_selinux_sec.html

Té a pŕoxima!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts