Linux – Créer un service pour PostgreSQL


Créer un service dans Fedora 18+, CentOS 7+, Red Hat 7+, Oracle Linux 7+ permet ce que faisaient avant les services présents dans /etc/init.d et qui étaient mis en oeuvre au travers des utilitaires chkconfig et service.

Depuis ces distributions de Linux, la notion de service a été remplacée par la notion de contrôle système : systemctl.

systemctl permet un contrôle beaucoup plus fin des services démarrés et arrêtés au niveau du système (ainsi que toute une gamme d’autres possibilités que je ne détaillerai pas ici)

Détail du fichier /etc/systemd/system/pg941.service :

[Unit]
Description=pg941 PostgreSQL Instance
After=network.target

[Service]
TimeoutSec=20
PIDFile=/pgdata/pg941/postmaster.pid
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /pgdata/pg941 -l /pgdata/pg941/pglog/pg941.log -w -t 20 start
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /pgdata/pg941 reload
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /pgdata/pg941 -m fast stop
Restart=on-abort
OOMScoreAdjust=-200


[Install]
WantedBy=multi-user.target

En l’occurrence, mon instance PostgreSQL a sa racine en /pgdata/pg941. De là découle l’ensemble de la configuration qui permettra le démarrage, le rechargement (changement de pg_hba.conf), et l’arrêt de l’instance. OOMScoreAdjust est un paramètre qui est posé pour laisser le temps au process postgres de prendre la shared memory dont il a besoin. Sans ce paramètre, il est fort possible que systemctl décide que postgres mette trop de temps à démarrer et le force à s’arrêter.

L’activation du service se fait de la manière suivante :

systemctl daemon-reload
systemctl enable pg941.service

Le démarrage du service :

systemctl start pg941

L’arrêt du service

systemctl stop pg941