Utiliser services-config.yaml
Lorsque vous utilisez le gestionnaire de services Linux simplifié pour effectuer une migration, Migrate to Containers crée un fichier d'artefact : services-config.yaml
.
Utilisez ce fichier pour contrôler l'initialisation de l'application sur un conteneur déployé.
Par exemple, après avoir migré le conteneur, modifiez le fichier services-config.yaml
pour contrôler l'initialisation de l'application comme suit :
- Supprimer des applications du fichier
- Ajouter des applications au fichier
- Modifier les propriétés d'initialisation d'une application
Vous trouverez ci-dessous un exemple de fichier services-config.yaml
:
version: v1beta1 env: - name: KEY1 value: VALUE1 - name: KEY2 value: VALUE2 applications: - name: nginx type: forking envfile: /path/to/file.txt env: - name: KEY3 value: VALUE3 start: - cmd: /usr/sbin/nginx -g 'daemon on; master_process on;' pidfile: /run/nginx.pid - name: ssh@ type: simple start: - cmd: /usr/sbin/sshd -i $SSHD_OPTS ignore_errors: true runtime_directories: mode: "0755" paths: - /run/sshd preserve: true - name: suitecrm type: exec start: - cmd: /etc/init.d/suitecrm start status: cmd: /etc/init.d/suitecrm status - name: phpsessionclean type: oneshot start: - cmd: /usr/lib/php/sessionclean timers: - name: phpsessionclean.timer on_calendar: - cron: 09,39 * * * * - name: mariadb type: notify prestart: - cmd: /usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" - cmd: /bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1" start: - cmd: /usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION poststart: - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" - cmd: /etc/mysql/debian-start user: mysql group: mysql
Dans ce fichier :
env
: spécifie les variables d'environnement au niveau global ou au niveau de l'application. Si vous spécifiez la même variable d'environnement au niveau global et au niveau de l'application, la variable d'environnement au niveau de l'application est prioritaire.Pour les variables d'environnement définies au niveau global, utilisez
env
pour spécifier une pairename
/value
. Les noms peuvent contenir des lettres ASCII, des chiffres et le trait de soulignement. Les noms ne peuvent pas commencer par un chiffre.Pour les variables d'environnement définies au niveau de l'application, utilisez
env
pour spécifier une pairename
/value
. Vous pouvez également utiliserenvfile
pour spécifier le chemin d'accès à un fichier texte contenant des lignes au format suivant :# Comments allowed KEY=VALUE
Si le fichier texte contient une définition de variable d'environnement qui duplique celle spécifiée par
env
, c'est la variable spécifiée parenv
qui est prioritaire.
applications
: spécifie la liste des applications à démarrer lorsque vous déployez le conteneur et définit les propriétés d'initialisation de l'application.name
: spécifie le nom de l'application.type
spécifie le type de l'application, comme suit :forking
: exécute le fichier spécifié parstart
sans duplication. L'exécutable du service doit être dupliqué. Nous vous recommandons de définir égalementpidfile
.exec
: fork pour exécuter le service. Le service est considéré comme démarré après l'appel deexec
sur l'exécutable.simple
: identique àexec
. Un servicesimple
se comporte différemment de la définitionsystemd
, car il attend à la foisfork
etexec
au lieu defork
.notify
: même chose que pourexec
, à ceci près que poursystemd
, la variable d'environnementNOTIFY_SOCKET
n'est pas définie, et les appelssd_notify systemd
ne fonctionneront donc pas.oneshot
: le service est considéré comme démarré après l'appel deexec
sur l'exécutable. L'état esterror
si le service se termine avec un code d'erreur différent de 0.
Commandes
prestart
,start
,poststart
etstatus
pour le service.Pour démarrer un service, Migrate to Containers exécute les commandes
prestart
(le cas échéant), puis la commandestart
et enfin les commandespoststart
(le cas échéant). Si une commande échoue et que vous n'avez pas configuré la commande pour utiliserignore_errors
, le service est arrêté et un message d'erreur s'affiche dans l'état du service.Les commandes permettant d'effectuer des opérations spécifiques sur l'application se présentent sous la forme suivante :
command-type: cmd: command shell: /bin/sh ignore_errors: false ignore_environment_variables: false
Où :
command-type : spécifie le type de commande :
prestart
,start
,poststart
oustatus
.Pour
start
, vous pouvez avoir une commande unique, sauf sitype
vautoneshot
.Si
type=forking
outype=oneshot
, les commandespoststart
sont exécutées après le fork de la commandestart
. Sinon, elles sont exécutées immédiatement après l'exécution de la commandestart
.command : spécifie la commande à exécuter pour effectuer l'opération.
shell
(facultatif) : par défaut, toutes les commandes sont exécutées dans l'interface système/bin/sh
. Vous pouvez éventuellement définirshell
sur/bin/bash
.ignore_errors
(facultatif) : sitrue
, un code de sortie de la commande normalement considéré comme un échec est enregistré, mais la commande est considérée comme ayant réussi. La valeur par défaut estfalse
.Par défaut, Migrate to Containers définit
ignore_errors
surtrue
pour tous les exécutablessystemd
incluant le préfixe "-".ignore_environment_variables
(facultatif) : si la valeur vauttrue
, la substitution de variable d'environnement n'est pas appliquée. La valeur par défaut estfalse
.Par défaut, Migrate to Containers définit
ignore_environment_variables
surtrue
pour tous les exécutablessystemd
incluant le préfixe ":".
pidfile
: spécifie le fichier pid contenant l'ID de processus du service utilisé pour vérifier si le processus est toujours en cours d'exécution.chdir
: spécifie le répertoire de travail du processus démarré.user
: spécifie le nom de l'utilisateur sous lequel le nouveau processus est lancé.group
: spécifie le nom du groupe sous lequel le nouveau processus démarre.timers
: spécifie la liste des minuteurs de l'application. L'application est activée chaque fois que l'un des minuteurs spécifiés est écoulé.version: v1beta1 env: [] Applications: - name: service_name type: service_type start: - cmd: service_exec_command timers: - name: timer_name on_calendar: - cron: realtime_time on_startup: - duration: monotonic_time on_service_start: - duration: monotonic_time on_service_stop: - duration: monotonic_time
name
: spécifie le nom du minuteur.on_calendar
: spécifie la liste des événements d'agenda pour le minuteur.cron
: heure spécifiée utilisant le format Cron. Exemple :cron: 0 0 * * * cron: @daily
on_startup
: spécifie une liste de durées (en fonction du moment où vous déployez votre conteneur).duration
: heure spécifiée utilisant le format de durée. Exemple :
duration: 30m duration: 1sec
on_service_start
: spécifie une liste de durées, par rapport au moment où l'état de votre application devient actif.duration
: heure spécifiée utilisant le format de durée.
on_service_stop
: spécifie une liste de durées, par rapport au moment où l'état de votre application devient inactif.duration
: heure spécifiée utilisant le format de durée.
Utilisez les propriétés suivantes pour spécifier les
paths
aux répertoires créés avant le démarrage du service :runtime_directories
: spécifie la liste despaths
aux répertoires créés dans/run/
.state_directories
: spécifie la liste despaths
aux répertoires créés dans/var/lib/
.cache_directories
: spécifie la liste despaths
aux répertoires créés dans/var/cache/
.logs_directories
: spécifie la liste despaths
aux répertoires créés dans/var/log/
.configuration_directories
: spécifie la liste despaths
aux répertoires créés dans/etc/
.
Chacune de ces propriétés utilise les options suivantes :
mode
: spécifie le mode de fichier. La valeur par défaut est 0755, ce qui correspond à un accès en lecture et en exécution pour tous, et un accès en écriture pour le propriétaire.preserve
: sifalse
, le répertoire est nettoyé lorsque le service est arrêté. La valeur par défaut esttrue
.
Ajouter ou supprimer un service dans votre fichier services.yaml
Vous pouvez ajouter ou supprimer un service de votre fichier services.yaml
en le modifiant manuellement. Chaque fois que vous ajoutez un service, vous devez renseigner les champs suivants :
name
type
start
Pour en savoir plus sur les champs obligatoires et facultatifs d'un service, consultez la définition services.yaml
ci-dessus.
Ajouter un service
Pour ajouter un service à votre fichier services.yaml
, procédez comme suit :
Ouvrez votre fichier
services.yaml
dans un éditeur de texte pour le modifier.Dans
services.yaml
, accédez à l'attributapplications
:version: v1beta1 env: - name: KEY1 ... applications:
Ajoutez le service souhaité sur la ligne située sous l'attribut
applications
, en commençant par le champname
, suivi des autres champs obligatoires et facultatifs correspondant à votre application :version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: ...
Si votre fichier
services.yaml
contient déjà des définitions de service sous l'attributapplications
, vous pouvez ajouter un service commençant par le champname
sur la ligne située sous la dernière entrée du service précédent :version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - name: type: start: ...
Enregistrez votre fichier
services.yaml
.
Supprimer un service
Pour supprimer un service de votre fichier services.yaml
, procédez comme suit :
Ouvrez votre fichier
services.yaml
dans un éditeur de texte pour le modifier.Dans
services.yaml
, accédez à l'attributapplications
:version: v1beta1 env: - name: KEY1 ... applications: ...
Supprimez le service souhaité en commençant par le champ
name
, suivi des autres champs obligatoires et facultatifs correspondant à votre application. Exemple :Avant la suppression du service :
version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: - name: ...
Une fois le service supprimé :
version: v1beta1 env: - name: KEY1 ... applications: - name: ...
Enregistrez votre fichier
services.yaml
.