La fonction systemd remplace les anciens scripts d'initialisation System-V des versions antérieures. Le systemd est une fonction événementielle qui permet de démarrer, de contrôler ou d'arrêter des sous-systèmes non dépendants en parallèle. Nous expliquons ici comment ajouter un script personnalisé à l'installation systemd.
1. Écrire et déboguer le script personnalisé
Généralement, un script systemd est écrit sous la forme d'un script shell. Commencez par écrire votre script personnalisé en utilisant les conventions normales. Nous appellerons notre script my-custom-script.sh et c'est simple :
#!/bin/sh echo "I am a custom script" > /var/tmp/script.out echo "The script was run at : `date`" >> > /var/tmp/script.out
Le script doit être exécutable.
# chmod 0755 /var/tmp/my-custom-script.sh
2. Décrire le script personnalisé à systemd
Avec le script écrit et testé manuellement, le script est prêt à être décrit au système systemd. Pour ce faire, un [nom].service fichier est nécessaire. La syntaxe utilise le format INI couramment utilisé pour les fichiers de configuration. Poursuivant notre exemple, nous avons besoin d'un fichier my-custom-script.service. L'exécutable s'exécutera exactement une fois à chaque démarrage du service. Le service ne sera pas démarré tant que la couche réseau n'est pas opérationnelle et stable.
Créez un nouveau fichier d'unité de service dans /etc/systemd/system/my-custom-script.service avec le contenu ci-dessous. Le nom de l'unité de service est défini par l'utilisateur et peut être n'importe quel nom de votre choix.
# This is my-custom-script.service, which describes the my-custom-script.sh file [Unit] Description=This is executed on shutdown or reboot DefaultDependencies=no Wants=network-pre.target # (if network is required before running the script) Before=network-pre.target shutdown.target reboot.target halt.target # Defines the order in which units are stoped. #(REQUIRED) [Service] Type=oneshot # enables specifying multiple custom commands that are then executed sequentially. (REQUIRED) RemainAfterExit=true # required by the oneshot setting (REQUIRED) Environment=ONE='one' "TWO='2" # you can set some environment variables, that may be necessary to pass as arguments ExecStart=/bin/true # because is a shutdown script nothing is done when this service is started ExecStop=/bin/bash /var/tmp/my-custom-script.sh ${ONE} ${TWO} # < --*********** change to the script full path ************ (REQUIRED) TimeoutStopSec=1min 35s # Configures the time to wait for stop. [Install] WantedBy=multi-user.target # When this unit is enabled, the units listed in WantedBy gain a Want dependency on the unit. (REQUIRED)
3. Activer le script pour les futurs redémarrages
Semblable au chkconfig des versions antérieures, le service doit être activé. Puisqu'un nouveau service a été ajouté, demandez au démon systemd de se reconfigurer :
# systemctl enable my-custom-script.service # systemctl daemon-reload