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


2

Sto lavorando su Ubuntu 16.04 e sono confuso nei file di servizio postgresql.

Ho installato il pacchetto deb postgresql dal repository e mi ha dato 3 file per avviare il servizio: - /etc/init.d/postgresql - /lib/systemd/system/postgresql.service - / lib / systemd / system / postgresql @. servizio

Ho provato a google per capire le differenze tra loro. Fino ad ora l'unica cosa che ho imparato è che init.d era il vecchio metodo di avvio dei servizi mentre systemd è il nuovo

Quindi, nel mio caso, quando invoco quanto segue, che cosa avvia il servizio?

# service postgresql start

Ho provato ad aggiungere un'uscita 0 nella funzione di avvio di init.d ma continua comunque il servizio. Quindi quella sceneggiatura è ridondante?

Devo modificare alcune configurazioni nell'invocazione iniziale del servizio e non so se dovrei apportare modifiche al file .service o al file @ .service

I contenuti del file .service sono:

# 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

A cosa serve / bin / true? Il codice effettivo per avviare il servizio viene visualizzato nel file @ .service

Quale viene utilizzato quando?

Questo mi sta confondendo totalmente :(

Risposte:


2

Benvenuto in Ask Ubuntu.

Ci sono stati 3 sistemi init su Ubuntu. I nuovi sistemi sono compatibili con le versioni precedenti, ma i vecchi sistemi non sono compatibili con le versioni successive.

I progetti software spesso impacchettano script per più sistemi init, poiché possono essere eseguiti su più sistemi. Ubuntu a sua volta installa più stili di file init, anche se non sono tutti utilizzati, come è il caso qui.

Il init.dfile che hai trovato è il più vecchio stile di script init, "SysvInit".

Il comando "service" che hai trovato viene utilizzato sia per gli script di inizializzazione "SysVinit" che per "Upstart", ma su un sistema basato su systemd, le chiamate per usarlo vengono effettivamente reindirizzate a comandi equivalenti a systemd, motivo per cui modificando "init. d "la sceneggiatura non ha avuto effetto.

Il postgresql.servicefile che hai trovato è lì che puoi gestire un servizio "postgresql" virtuale, che avvierà e fermerà tutti i servizi PostgreSQL contemporaneamente, senza menzionare una versione particolare. Puoi vedere i suggerimenti su cosa serve il file nel file "@ .service" che hai trovato:

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

Sembra un cattivo uso di un .servicefile. L'uso di .targetun'unità è un modo più naturale di raggruppare una raccolta di servizi. Puoi controllare man systemd.directivesper trovare le voci del documento per tutte queste direttive se vuoi comprenderne i dettagli.

Il postgresql@.servicefile è un "modello", in modo che più istanze di PostgreSQL possano essere eseguite sullo stesso server con versioni diverse, ma avviate e arrestate in modo coerente. Questo è il file su cui concentrarsi. Come suggerisce un commento nel file, puoi usarlo per avviare una versione particolare di PostgreSQL, come:

 systemctl start postgresql@9.3-main
 systemctl stop postgresql@9.3-main
 systemctl restart postgresql@9.3-main

Ovviamente, devi effettivamente avere la versione di PostgreSQL installata che stai tentando di avviare o arrestare!

Quindi, l'installazione di Systemd di PostgreSQL ti consente di avviare o arrestare tutti i cluster PostgreSQL contemporaneamente, oppure di arrestare e avviare un determinato cluster.

Per il tuo uso, concentrati sui systemd .servicefile e sul systemctlcomando di servizio. Non è necessario utilizzare i comandi init.do servicequando systemd .servicevengono forniti i file.

Vedi anche: SysV, Upstart e systemd init coesistenza di script .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.