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