postgresql.service vs. postgresql @ .service em / lib / systemd / system

2

Estou trabalhando no Ubuntu 16.04 e estou confuso em arquivos de serviço postgresql.

Eu instalei o pacote postgresql deb do repo e ele me deu 3 arquivos para iniciar o serviço: - /etc/init.d/postgresql - /lib/systemd/system/postgresql.service - /lib/systemd/system/[email protected]

Eu tentei pesquisar no Google para entender as diferenças entre eles. Até agora, a única coisa que aprendi é que o init.d era o método antigo de iniciar os serviços, enquanto o systemd é o novo

Então, no meu caso, quando invoco o seguinte, o que faz o serviço iniciar?

# service postgresql start

Eu tentei adicionar uma saída 0 na função start do init.d, mas ainda assim o serviço é iniciado. Então esse script é redundante?

Eu preciso alterar algumas configurações na chamada inicial do serviço e não sei se devo fazer alterações no arquivo .service ou no arquivo @ .service

O conteúdo do arquivo .service é:

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

[Unit]
 Description=PostgreSQL RDBMS

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

[Install]
 WantedBy=multi-user.target

Qual é o / bin / true para? O código real para iniciar o serviço aparece no arquivo @ .service

Qual é usado quando?

Isso está me confundindo totalmente: (

    
por Mittal 16.02.2017 / 09:55

1 resposta

1

Bem-vindo ao Ask Ubuntu.

Existem 3 sistemas init no Ubuntu. Os novos sistemas são compatíveis com versões anteriores, mas os sistemas antigos não são compatíveis com versões futuras.

Os projetos de software geralmente empacotam scripts para vários sistemas init, já que podem ser executados em vários sistemas. O Ubuntu, por sua vez, instala vários estilos de arquivos init, mesmo que eles não sejam todos usados, o que é o caso aqui.

O arquivo init.d que você encontrou é o estilo mais antigo do script de inicialização, "SysvInit".

O comando "service" que você encontrou é usado para os scripts init "SysVinit" e "Upstart", mas em um sistema baseado em systemd, as chamadas para usá-lo efetivamente são redirecionadas para comandos equivalentes ao systemd, razão pela qual O script "init.d" não teve efeito.

O arquivo postgresql.service que você encontrou está lá, você pode gerenciar um serviço "postgresql" virtual, que iniciará e interromperá todos os serviços do PostgreSQL ao mesmo tempo, sem mencionar uma versão específica. Você pode ver dicas de como o arquivo se encontra no arquivo "@ .service" encontrado:

PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

Isso parece um mau uso de um arquivo .service . Usar uma unidade .target é uma maneira mais natural de agrupar uma coleção de serviços. Você pode verificar man systemd.directives para encontrar as entradas do documento para todas essas diretivas, se quiser entender os detalhes delas.

O arquivo [email protected] é um arquivo "modelo", para que várias instâncias do PostgreSQL possam ser executadas no mesmo servidor com versões diferentes, mas iniciadas e interrompidas de maneira consistente. Este é o arquivo para focar. Como um comentário no arquivo sugere, você pode usá-lo para iniciar uma versão específica do PostgreSQL, como:

 systemctl start [email protected]
 systemctl stop [email protected]
 systemctl restart [email protected]

É claro que você precisa ter a versão do PostgreSQL instalada que você está tentando iniciar ou parar!

Assim, a configuração systemd do PostgreSQL permite iniciar ou parar todos os clusters do PostgreSQL de uma só vez, ou parar e iniciar um cluster em particular.

Para seu uso, concentre-se nos arquivos systemd .service e systemctl service. Não há necessidade de usar os comandos init.d ou service quando arquivos systemd .service são fornecidos.

Veja também: Coexistência de scripts de inicialização SysV, Upstart e systemd .

    
por Mark Stosberg 16.02.2017 / 16:26