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
envpour 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
envpour spécifier une pairename/value. Vous pouvez également utiliserenvfilepour 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 parenvqui 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.typespécifie le type de l'application, comme suit :forking: exécute le fichier spécifié parstartsans 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 deexecsur l'exécutable.simple: identique àexec. Un servicesimplese comporte différemment de la définitionsystemd, car il attend à la foisforketexecau lieu defork.notify: même chose que pourexec, à ceci près que poursystemd, la variable d'environnementNOTIFY_SOCKETn'est pas définie, et les appelssd_notify systemdne fonctionneront donc pas.oneshot: le service est considéré comme démarré après l'appel deexecsur l'exécutable. L'état esterrorsi le service se termine avec un code d'erreur différent de 0.
Commandes
prestart,start,poststartetstatuspour le service.Pour démarrer un service, Migrate to Containers exécute les commandes
prestart(le cas échéant), puis la commandestartet 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,poststartoustatus.Pour
start, vous pouvez avoir une commande unique, sauf sitypevautoneshot.Si
type=forkingoutype=oneshot, les commandespoststartsont 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éfinirshellsur/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_errorssurtruepour tous les exécutablessystemdincluant 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_variablessurtruepour tous les exécutablessystemdincluant 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_timename: 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: 1secon_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
pathsaux répertoires créés avant le démarrage du service :runtime_directories: spécifie la liste despathsaux répertoires créés dans/run/.state_directories: spécifie la liste despathsaux répertoires créés dans/var/lib/.cache_directories: spécifie la liste despathsaux répertoires créés dans/var/cache/.logs_directories: spécifie la liste despathsaux répertoires créés dans/var/log/.configuration_directories: spécifie la liste despathsaux 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 :
nametypestart
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.yamldans 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.yamlcontient déjà des définitions de service sous l'attributapplications, vous pouvez ajouter un service commençant par le champnamesur 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.yamldans 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.