Systemctl service

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

Dans cet article nous allons créer un service, très simplement, avec Systemctl.

Pour cela, nous allons d'abord utiliser PHP pour fabriquer notre service, puis nous allons créer un fichier service pour automatiser son démarrage !

Le programme

Création

Le service que nous allons faire va simplement écrire le temps unix dans un fichier de journalisation pour que, une fois démarré et passé en tâche de fond, nous puissions nous assurer qu'il tourne toujours !

Dans le dossier /opt/php-service nous allons créer le fichier clock.php :

<?php

define("LOG_FILE", "/tmp/clock.log");

while(1){
    file_put_contents(LOG_FILE, time()."\n", FILE_APPEND);
    sleep(2);
}

Le but de ce programme est d'écrire, toutes les 2 secondes, la date dans le fichier /tmp/clock.log.

Pas un démon

On peut remarquer que ce n'est même pas un démon et qu'il ne rend pas la main lorsque nous allons l’exécuter. D’ailleurs il n'utilise aucune des fonctions décrites dans cet article car nous allons demander à SystemD de s'occuper de tout.

Test sans SystemD

Nous allons tester ce programme :

# php clock.php

Puis dans un autre terminal, nous pouvons faire :

# tail -f /tmp/clock.php
1715971610
1715971612
1715971614
1715971616
...

Préparation pour devenir un service

shebang

Nous pourrions utiliser PHP à chaque fois que l'on veut invoquer notre service mais on va plutôt ajouter le shebang à la première ligne de notre fichier clock.php :

#!/usr/bin/php

Le dossier de l'exécutable de PHP peut changer en fonction des distributions Linux et, si vous avez un doute, n'hésitez pas à utiliser la commande whereis :

# whereis php
php: /usr/bin/php /usr/lib64/php /usr/share/php /usr/share/man/man1/php.1.gz

Droit d'exécution

Maintenant que nous avons ajouté le shebang, bash va savoir comment exécuter notre programme et il ne nous reste plus qu'a modifier ses droits pour le rendre exécutable :

# chmod +x clock.php

On peut maintenant exécuter notre programme ainsi :

# ./clock.php

Ajout dans le path

Pour reproduire le même comportement que les autres programmes, il est possible d'ajouter notre programme au path pour pouvoir l'appeler grâce à l’autocomplétion. Pour cela, nous allons ajouter un lien symbolique dans le répertoire /usr/bin/ :

# ln -fs /opt/php-service/clock.php /usr/bin/clock-php

Le programme clock existant déjà, on rajoute -php à la fin pour ne pas écraser le programme original :). Si votre programme possède un nom unique sur le système, vous n'avez pas besoin de faire ça !

Maintenant de n'importe où on peut utiliser l'autocomplétion pour appeler notre programme :

# clock-php

Et même demander à whereis où il se trouve :

# whereis clock-php
clock-php: /usr/bin/clock-php

Nice !

Création d'un utilisateur et un groupe

Pour des raisons de sécurité, il est préférable que le programme ne tourne pas en tant que root mais en tant que simple utilisateur.

Puis un utilisateur un peu spécial, qui ne peut pas se connecter et qui n'a pas de répertoire home :

# useradd -r -s /bin/false clock-php

Notez que l'option -r créer un utilisateur système, c'est à dire qui n'a pas de répertoire home mais, cela s'occupe également de la création du groupe associé (clock-php) et ajoute l'utilisateur dans ce groupe !

Fichier de service systemd

Maintenant que notre programme ressemble à un vrai programme, nous pouvons créer un fichier .service pour demander à systemd de s'en occuper.

Nous allons créer le fichier clock-php.service dans le même répertoire que le programme pour des raison de simplicité :