Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
utilisateurs:stepho:creer_un_service_avec_systemd [Le 12/01/2016, 13:14] stepho Livrée : https://doc.ubuntu-fr.org/creer_un_service_avec_systemd |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>Vivid Wily tutoriel systemd service BROUILLON}} | ||
- | ---- | ||
- | ====== Créer un nouveau service avec Systemd ====== | ||
- | Ce tutoriel décrit la démarche à suivre pour transformer un programme en un service Systemd pouvant être lancé automatiquement au démarrage du système. | ||
- | |||
- | Pour notre exemple, nous allons créer un service pour lancer le daemon [[:Deluge]] au démarrage (''deluged''), mais cela peut s'appliquer à n'importe quel programme. | ||
- | |||
- | ===== Contexte ===== | ||
- | [[:Systemd]] ([[https://fr.wikipedia.org/wiki/Systemd|Wikipedia]]) remplace [[:script_sysv|System V]] ([[https://fr.wikipedia.org/wiki/UNIX_System_V|Wikipedia]]) et [[:Upstart]] en tant que système d'initialisation par défaut dans Ubuntu depuis la version 15.04 [[:Vivid]], et depuis la version 8 dans [[https://www.debian.org/|Debian]] (Jessie). | ||
- | |||
- | ===== Pré-requis ===== | ||
- | * Disposer des [[:sudo|droits d'administration]] | ||
- | * Savoir utiliser le [[:terminal]] | ||
- | |||
- | ===== Création d'un script d'encapsulation du programme ===== | ||
- | Deluged ne gère pas les paramètres d'arrêt ou de relance, nous devons donc créer un script qui s'en chargera. | ||
- | On pourra stocker ce script dans ''/usr/local/bin''. | ||
- | |||
- | <note>Le script présenté ici peut être largement amélioré, notamment dans la gestion des erreurs.</note> | ||
- | |||
- | <code>sudo cat >/usr/local/bin/deluge.sh</code> | ||
- | Puis collez le code ci-dessous (<CTRL>+<D> pour finir). | ||
- | <code> | ||
- | #!/bin/bash | ||
- | # /usr/local/bin/deluge.sh | ||
- | # | ||
- | |||
- | function d_start() | ||
- | { | ||
- | echo "Deluge : starting service" | ||
- | deluged --pidfile=/tmp/deluge.pid | ||
- | sleep 5 | ||
- | echo "PID is $(cat /tmp/deluge.pid)" | ||
- | } | ||
- | |||
- | function d_stop() | ||
- | { | ||
- | echo "Deluge : stopping service (PID=$(cat /tmp/deluge.pid))" | ||
- | kill $(cat /tmp/deluge.pid) | ||
- | rm /tmp/deluge.pid | ||
- | } | ||
- | |||
- | function d_status() | ||
- | { | ||
- | ps -ef | grep deluged | grep -v grep | ||
- | echo "PID file indicate $(cat /tmp/deluge.pid 2>/dev/null)" | ||
- | } | ||
- | |||
- | # Some things that run always | ||
- | touch /var/lock/deluge | ||
- | |||
- | # Gestion des instructions du service | ||
- | case "$1" in | ||
- | start) | ||
- | d_start | ||
- | ;; | ||
- | stop) | ||
- | d_stop | ||
- | ;; | ||
- | reload) | ||
- | d_stop | ||
- | sleep 1 | ||
- | d_start | ||
- | ;; | ||
- | status) | ||
- | d_status | ||
- | ;; | ||
- | *) | ||
- | echo "Usage: $0 {start|stop|reload|status}" | ||
- | exit 1 | ||
- | ;; | ||
- | esac | ||
- | |||
- | exit 0 | ||
- | </code> | ||
- | |||
- | ===== Création du fichier de service ===== | ||
- | Dans Systemd , les services sont définis dans des fichiers ''.service'', situé dans ''/etc/systemd/system/''. | ||
- | |||
- | Créons un fichier de service pour notre programme : | ||
- | <code>sudo cat >/etc/systemd/system/deluge.service</code> | ||
- | Puis collez le code ci-dessous (<CTRL>+<D> pour finir). | ||
- | <code> | ||
- | [Unit] | ||
- | Description=Deluge daemon | ||
- | After=network.target auditd.service | ||
- | |||
- | [Service] | ||
- | Type=forking | ||
- | ExecStart=/usr/local/bin/deluge.sh start | ||
- | ExecStop=/usr/local/bin/deluge.sh stop | ||
- | ExecReload=/usr/local/bin/deluge.sh reload | ||
- | |||
- | [Install] | ||
- | WantedBy=multi-user.target | ||
- | </code> | ||
- | |||
- | ===== Installation du service ===== | ||
- | Il faut maintenant recharge la liste des services : | ||
- | <code>sudo systemctl daemon-reload</code> | ||
- | Puis activer le lancement du service au démarrage : | ||
- | <code>sudo systemctl daemon-reload</code> | ||
- | |||
- | ===== Principales commandes de gestion des services===== | ||
- | Pour mémoire, les commandes suivantes permettent de gérer le service : | ||
- | |||
- | <code>sudo systemctl <commande> <service></code> | ||
- | (dans notre exemple, ''<service>''=''deluge'') | ||
- | |||
- | ^ Commande ^ Description ^ | ||
- | |start|Démarrer le service| | ||
- | |stop|Arrêter le service| | ||
- | |status|État du service| | ||
- | |is-enabled|Indique si le service est activé au démarrage| | ||
- | |enable|Active le service au démarrage| | ||
- | |disable|Désactive le service au démarrage| | ||
- | |||
- | ===== Conclusion ===== | ||
- | <note important>Attention, les services sont lancé par ''root'', donc si vous aviez déjà configuré le programme avec un autre utilisateur, il faudra : | ||
- | * soit recopier la configuration pour ''root'', | ||
- | * soit faire pointer le service vers la bonne configuration (pour ''deluged'', il y a une option ''--config'') | ||
- | </note> | ||
- | |||
- | Voilà, il ne reste qu'à terter que tout fonctionne en lançant le service: | ||
- | <code>sudo systemctl start deluge</code> | ||
- | |||
- | Si tout fonctionne on peut redémarrer la machine pour vérifier que le service se lance automatiquement: | ||
- | <code>sudo reboot</code> | ||
- | |||
- | ===== Voir aussi ===== | ||
- | * [[http://www.freedesktop.org/wiki/Software/systemd/|Site officiel de Systemd]] | ||
- | * [[https://wiki.debian.org/fr/systemd|Description de Systemd (Debian)]] | ||
- | * [[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/chap-Managing_Services_with_systemd.html|Administration des services avec Systemd (RedHat)]] | ||
- | ---- | ||
- | //Contributeurs principaux : [[:utilisateurs:stepho]].// |