Tuto : installer des briques Talend dans un contexte Linux/SystemD

Bienvenue dans Le Blog des Experts, l’espace de notre site dédié à la technique ! Vous y trouverez des articles, écrits par nos consultants, sur les technologies qui les passionnent : tutoriels, tests, points de vue et bien plus encore, ils vous disent tout !


logo systemD

SystemD, une petite révolution dans le système d’initialisation

Une révolution a eu lieu dans le domaine des systèmes d’exploitation GNU/Linux. Le processus d’initialisation de l’OS, (qui s’occupe de gérer le démarrage, du lancement du noyau Linux à l’interface graphique, ainsi que la surveillance des processus) était jusqu’alors géré majoritairement par SysVinit.

A présent, le nouveau système d’initialisation Systemd (de Lennart Poettering) remplace peu à peu SysVinit, dans la plupart des distributions  Linux (ex. Red Hat / Centos 7, Debian 8, Ubuntu 15.04, Fedora 15, Archlinux, gentoo…).

Il y a énormément de polémiques sur ce changement entre les « pros » et anti Systemd mais, ce n’est pas le sujet de cet article.

S’adapter à un nouveau système

Cet état de fait nous oblige (en tant qu’intégrateur Talend), à modifier la manière avec laquelle nous installons les différents services de la plateforme Talend sur un serveur GNU/Linux.

Par ailleurs, il faut savoir que Talend, depuis la version 5.6.1, supporte les distributions Red Hat / Centos 7, mais que la documentation concernant l’installation des services, est toujours restée sur l’utilisation de SysVinit (elle devrait être mise à jour pour Systemd à partir de la prochaine version 6).

Nous devons donc, nous adapter à ce nouveau système.

Comment mettre en place un service avec SystemD

Après avoir installé vos différentes briques Talend (TAC, commandLine, Jobserver, tlogserver…) à partir de l’installateur Talend et avoir sélectionné l’installation des services, vous trouverez, comme à leur habitude, les scripts de démarrage et d’arrêt des différents services Talend, dans le répertoire /etc/init.d/.

ETAPE 1 : VÉRIFICATION DES SCRIPTS DE SERVICES EXISTANTS

Dans ces scripts de services, assurez-vous de ne pas forcer pas le démarrage / l’arrêt avec un autre compte de service, comme il est d’usage de le faire. Voir dans l’exemple ci-dessous (remplacer ce qui est en gras par ce qui est souligné) :

start() {# the start has 2 cases:
# 1- tac is installed with embedded tomcat: (install_type=1)
# in this case, just call the start_tac.sh script in tac home directory
# 2- tac is installed on an external tomcat: (install_type=2)
# in this case, go to the /bin dorectory of tomcat and run the startup.sh
# (make sure catalina directory is correct above and /bin/startup.sh exists)
echo -n « starting talend administration center… »
if [ $INSTALL_TYPE -eq 1 ]; then
cd $TAC_HOME
#su – $user -c « cd $TAC_HOME && ./start_tac.sh »
cd $TAC_HOME./start_tac.sh
fi

Le compte de service sera défini dans un autre script spécifique à Systemd, que nous verrons par la suite. A présent, assurez-vous que ces scripts sont fonctionnels, à l’aide des commandes :

/etc/init.d/<le nom du script> start et /etc/init.d/<le nom du script> stop

ETAPE 2: DÉPLACEMENT DES SCRIPTS DE SERVICES

Lorsque vous êtes certains que ces scripts sont opérationnels, déplacez les dans le répertoire /usr/lib/systemd/scripts.

ETAPE 3 : DÉFINITION DU SCRIPT DE SERVICE SYSTEMD

Avec Systemd, vous devez créer un script de déclaration du service, dans le répertoire /usr/lib/systemd/system. La convention de nommage de ce fichier doit être : <nom du script de service>.service comme par exemple : talend-tac-561.service qui correspondra à mon script /usr/lib/systemd/scripts/talend-tac-561. Ceci dans l’optique d’une meilleure visibilité et maintenabilité.

Dans le script talend-tac-561.service, vous devez saisir les informations suivantes :

[Unit]

Description=Talend Administrator Center v5.6.1
After=syslog.target network.target mariadb.service httpd.service
[Service]
Type=oneshot
User=crouzeaud
ExecStart=/usr/lib/systemd/scripts/talend-tac-561 start
ExecStop=/usr/lib/systemd/scripts/talend-tac-561 stop
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

Explication des éléments du script :

Dans la balise [Unit] vous trouverez la description du service avec l’argument Description=… L’argument After= permet de définir l’ordre de démarrage des services lorsque celui-ci est important.

Dans la balise [service] vous trouverez l’argument Type=oneshot qui permet de lancer la commande une seule fois puis de sortir. Avec ce type de démarrage, vous devez avoir en plus l’argument RemainAfterExit=yes, afin que Systemd considère que le processus est actif après la sortie.

Toujours dans cette même balise, l’argument [User]= permet de définir le compte de service (compte utilisateur qui exécutera le processus). Les arguments ExecStart= et ExecStop= spécifient les commandes qui seront utilisées pour démarrer et arrêter le service. L’argument TimeoutSec= permet quant à lui, de définir le temps d’attente maximum à partir duquel Systemd le considèrera comme ayant échoué.

Dans la balise [Install], vous trouverez l’argument WantedBy= qui signifie que ce service sera dépendant du service multi-user.target.

ETAPE 4 : LANCEMENT, RE-LANCEMENT ET ARRÊT DU SERVICE AVEC SYSTEMD

Maintenant que votre script Systemd de déclaration de service est prêt, vous pouvez lancer le service avec la commande sudo systemctl start talend-tac-561.service

Pour vous assurer que ce service est bien lancé, vous pouvez taper la commande sudo systemctl status talend-tac-561.service qui vous retournera l’état du service.

Par ailleurs, pour arrêter le service, vous devez utiliser la sudo systemctl stop talend-tac-561.service et sudo systemctl reload talend-tac-561.service dans le cas où vous souhaitez le redémarrer.

ETAPE 5 : DÉCLARATION DU SERVICE AU DÉMARRAGE DU SYSTÈME

Pour activer le service au démarrage du système, vous devez utiliser la commande sudo systemctl enable talend-tac-561.service

La commande systemctl is-enabled talend-tac-561.service vous permettra de vérifier si le service est bien activé au redémarrage de la machine.

Vous pouvez utiliser la commande systemctl list-units pour avoir la liste de tous les services. Il est possible de filtrer cette liste, avec des commandes comme  systemctl list-units –type=service ou systemctl | grep talend

ETAPE 6 : MODIFICATION ULTÉRIEURE DU SCRIPT DE SERVICE

A chaque modification des scripts de service (Systemd et Bash), il est impératif de lancer la commande systemctl daemon-reload, afin que Systemd soit réinitialisé et qu’il scanne les nouveaux, et changements, d’units.

ETAPE 7 : RECHERCHE D’ERREUR ET SYSTÈME DE JOURNALISATION

Systemd dispose de son propre système de journalisation, interrogeable à l’aide de la commande journalctl. Ce dernier journalise toutes les étapes d’initialisation et de démarrage des services et ce, depuis le boot. Par exemple, vous pouvez utiliser les arguments suivants :

sudo journalctl -e            pour aller en dernière page
sudo journalctl -xn          permet d’avoir plus détail sur les n dernière lignes

Ces commandes vous permettront d’identifier les problèmes l’hors de la mise en place de vos scripts.

Gestion de démarrage et d’arrêt du système avec SystemD

Bien que les commande halt et reboot sont toujours fonctionnelles pour le démarrage et l’arrêt de l’ensemble du système, elles sont en réalité des alias des commandes :

$ systemctl reboot
$ systemctl poweroff

 Cédric Rouzeaud

Sources utiles et informations complémentaires

man systemctl; man journalctl

http://fr.wikipedia.org/wiki/Systemd

http://www.freedesktop.org/wiki/Software/systemd/

https://wiki.archlinux.org/index.php/Systemd

http://www.digitalinferno.com/wiki/Wiki.jsp?page=Tomcat8SystemdFedora

http://wiki.call-cc.org/spiffy-systemd-scripts

Comments are closed.