

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exemple 7 : Exécution des commandes et des scripts
<a name="cookbooks-101-basics-commands"></a>

**Important**  
Le AWS OpsWorks Stacks service a pris fin le 26 mai 2024 et a été désactivé tant pour les nouveaux clients que pour les clients existants. Nous recommandons vivement aux clients de migrer leurs charges de travail vers d'autres solutions dès que possible. Si vous avez des questions sur la migration, contactez l' AWS Support équipe sur [AWS Re:Post](https://repost.aws/) ou via le [AWS Support](https://aws.amazon.com/support) Premium.

Les ressources de Chef peuvent gérer une grande variété de tâches sur une instance, mais il est parfois préférable d'utiliser une commande shell ou un script. Par exemple, vous utilisez peut-être certains scripts pour réaliser des tâches spécifiques et il sera plus facile de continuer à les utiliser plutôt que d'implémenter un nouveau code. Cette section montre comment exécuter des commandes ou des scripts sur une instance. 

**Topics**
+ [Exécution des commandes](#cookbooks-101-basics-commands-script)
+ [Exécution des scripts](#cookbooks-101-basics-commands-execute)

## Exécution des commandes
<a name="cookbooks-101-basics-commands-script"></a>

La ressource [https://docs.chef.io/chef/resources.html#script](https://docs.chef.io/chef/resources.html#script) exécute une ou plusieurs commandes. Elle prend en charge les interpréteurs de commande csh, bash, Perl, Python et Ruby afin de permettre une utilisation sur les systèmes Linux ou Windows tant que les interprètes appropriés sont installés. Cette rubrique montre comment exécuter une commande simple bash sur une instance Linux. Chef prend également en charge les ressources [powershell\$1script](https://docs.chef.io/chef/resources.html#powershell-script) et [batch](https://docs.chef.io/chef/resources.html#batch) pour exécuter des scripts sous Windows. Pour de plus amples informations, veuillez consulter [Exécution d'un PowerShell script Windows](cookbooks-101-opsworks-opsworks-powershell.md). 

**Mise en route**

1. Dans le répertoire `opsworks_cookbooks`, créez un répertoire nommé `script` et accédez à celui-ci.

1. Ajoutez un fichier `metadata.rb` à `script` avec le contenu suivant.

   ```
   name "script"
   version "0.1.0"
   ```

1. Initialisez et configurez Test Kitchen, comme décrit dans [Exemple 1 : Installation des packages](cookbooks-101-basics-packages.md)et supprimez CentOS de la liste `platforms`.

1. Dans `script`, créez un répertoire nommé `recipes`.

Vous pouvez exécuter des commandes en utilisant la ressource `script` elle-même, mais Chef prend également en charge un ensemble de versions propres à l'interpréteur de commande de la ressource, qui sont nommées pour l'interpréteur. La recette suivante utilise une ressource [https://docs.chef.io/chef/resources.html#bash](https://docs.chef.io/chef/resources.html#bash) pour exécuter un script bash simple.

```
bash "install_something" do
  user "root"
  cwd "/tmp"
  code <<-EOH
    touch somefile
  EOH
  not_if do
    File.exists?("/tmp/somefile")
  end
end
```

La ressource `bash` est configurée comme suit.
+ Elle utilise l'action par défaut, `run`, qui exécute les commandes dans le bloc `code`.

  Cet exemple a une commande, `touch somefile`, mais un bloc `code` peut contenir plusieurs commandes.
+ L'attribut `user` spécifie l'utilisateur qui exécute la commande.
+ L'attribut `cwd` spécifie le répertoire de travail.

  Pour cet exemple, `touch` crée un fichier dans le répertoire `/tmp`.
+ L'attribut de protection `not_if` indique à la ressource de ne rien faire si le fichier existe déjà.

**Pour exécuter la recette**

1. Créez un fichier `default.rb` qui contient l'exemple de code précédent et enregistrez-le dans `recipes`.

1. Exécutez `kitchen converge`, puis connectez-vous à l'instance pour vérifier que le fichier se trouve dans `/tmp`.

## Exécution des scripts
<a name="cookbooks-101-basics-commands-execute"></a>

La ressource `script` est pratique, surtout si vous avez besoin d'exécuter une ou deux commandes seulement, mais il est souvent préférable de stocker le script dans un fichier et d'exécuter le fichier. La ressource [https://docs.chef.io/chef/resources.html#execute](https://docs.chef.io/chef/resources.html#execute) exécute un fichier exécutable spécifié, y compris les fichiers de script, sous Linux ou Windows. Cette rubrique modifie le livre de recettes `script` de l'exemple précédent afin d'utiliser `execute` pour exécuter un script shell simple. Vous pouvez facilement étendre l'exemple pour des scripts plus complexes ou d'autres types de fichiers exécutables.

**Pour configurer le fichier de script**

1. Ajoutez un sous-répertoire `files` à `script` et un sous-répertoire `default` à `files`.

1. Créez un fichier nommé `touchfile` qui contient les éléments suivants et ajoutez-le à `files/default`. Une ligne courante d'interpréteur Bash est utilisée dans cet exemple, mais vous pouvez opter pour un interpréteur qui fonctionne dans votre environnement shell si nécessaire.

   ```
   #!/usr/bin/env bash
   touch somefile
   ```

   Le fichier de script peut contenir n'importe quel nombre de commandes. Pour plus de facilité, cet exemple de script n'a qu'une seule commande `touch`.

La recette suivante exécute le script. 

```
cookbook_file "/tmp/touchfile" do
  source "touchfile"
  mode 0755
end

execute "touchfile" do
  user "root"
  cwd "/tmp"
  command "./touchfile"
end
```

La ressource `cookbook_file` copie le fichier de script dans `/tmp` et définit le mode de façon à rendre le fichier exécutable. La ressource `execute` exécute ensuite le fichier comme suit :
+ L'attribut `user` spécifie l'utilisateur de la commande (`root` dans cet exemple).
+ L'attribut `cwd` spécifie le répertoire de travail (`/tmp` dans cet exemple).
+ L'attribut `command` spécifie le script à exécuter (`touchfile` dans cet exemple) qui se trouve dans le répertoire de travail.

**Pour exécuter la recette**

1. Remplacez le code de `recipes/default.rb` par l'exemple précédent.

1. Exécutez `kitchen converge`, puis connectez-vous à l'instance pour vérifier que `/tmp` contient maintenant le fichier de script, avec le mode défini sur 0755 et `somefile`.

Lorsque vous avez terminé, exécutez `kitchen destroy` pour arrêter l'instance. La section suivante utilise un nouveau livre de recettes.