

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.

# Exécution de tâches cron sur les instances Linux
<a name="workingcookbook-extend-cron"></a>

**Important**  
Le AWS OpsWorks Stacks service a atteint sa fin de vie 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.

Une tâche cron Linux demande au processus cron d'exécuter une ou plusieurs commandes selon un calendrier spécifié. Par exemple, supposons que votre pile prenne en charge une application de commerce en ligne PHP. Vous pouvez configurer une tâche cron pour que le serveur vous envoie un rapport des ventes à une heure définie chaque semaine. Pour plus d'informations sur cron, consultez [cron](http://en.wikipedia.org/wiki/Cron) sur Wikipedia. Pour plus d'informations sur la façon d'exécuter directement une tâche cron sur une instance ou un ordinateur Linux, consultez [Présentation et utilisation de cron et crontab](https://kb.iu.edu/d/afiz) sur le site de la base de connaissances de l'université d'Indiana.

Même si vous pouvez configurer manuellement des tâches `cron` sur les instances Linux en vous connectant à elles avec SSH et en modifiant leurs entrées `crontab`, un avantage essentiel d' OpsWorks Stacks est que vous pouvez lui ordonner d'exécuter la tâche sur une couche complète d'instances. La procédure suivante décrit comment configurer une `cron` tâche sur les instances d'une couche PHP App Server, mais vous pouvez utiliser la même approche avec n'importe quelle couche.

**Pour configurer une tâche `cron` sur les instances d'une couche**

1. Implémentez un livre de recettes avec une recette ayant une ressource `cron` qui configure la tâche. L'exemple suppose que la recette se nomme `cronjob.rb` ; les détails de l'implémentation sont décrits ultérieurement. Pour plus d'informations sur les livres de recettes et les recettes, consultez [Livres de recettes et recettes](workingcookbook.md).

1. Installez le livre de recettes sur votre pile. Pour de plus amples informations, veuillez consulter [Installation de livres de recettes personnalisés](workingcookbook-installingcustom-enable.md).

1. Demandez à OpsWorks Stacks d'exécuter automatiquement la recette sur les instances de la couche en l'affectant aux événements du cycle de vie suivants. Pour de plus amples informations, veuillez consulter [Exécution automatique des recettes](workingcookbook-assigningcustom.md).
   + **Configuration** : l'attribution `cronjob.rb` à cet événement indique à OpsWorks Stacks d'exécuter la recette sur toutes les nouvelles instances.
   + **Déployer** : l'attribution `cronjob.rb` à cet événement indique à OpsWorks Stacks d'exécuter la recette sur toutes les instances en ligne lorsque vous déployez ou redéployez une application sur la couche.

   Vous pouvez aussi exécuter manuellement la recette sur les instances en ligne en utilisant la commande de pile `Execute Recipes`. Pour de plus amples informations, veuillez consulter [Exécution des commandes de pile](workingstacks-commands.md).

L'exemple `cronjob.rb` suivant configure une tâche cron pour exécuter une fois par semaine une application PHP implémentée par l'utilisateur et qui collecte les données des ventes à partir du serveur et envoie un rapport. Pour plus d'exemples d'utilisation d'une ressource cron, consultez [cron](https://docs.chef.io/chef/resources.html#cron). 

```
cron "job_name" do
  hour "1"
  minute "10"
  weekday "6"
  command "cd /srv/www/myapp/current && php .lib/mailing.php"
end
```

`cron` est une ressource Chef qui représente une tâche `cron`. Lorsque OpsWorks Stacks exécute la recette sur une instance, le fournisseur associé gère les détails de configuration de la tâche.
+ `job_name` est un nom défini par l'utilisateur pour la tâche `cron`, tel que `weekly report`.
+ `hour`/`minute`/`weekday` spécifie à quel moment les commandes doivent être exécutées. Cet exemple exécute les commandes chaque samedi à 1 h 10.
+ `command` spécifie les commandes à exécuter.

  Cet exemple exécute deux commandes. La première accède au répertoire `/srv/www/myapp/current`. La seconde exécute l'application `mailing.php` implémentée par l'utilisateur et qui collecte les données des ventes et envoie le rapport.

**Note**  
La commande `bundle` ne fonctionne pas avec les tâches `cron` par défaut. La raison en est que OpsWorks Stacks installe le bundler dans le répertoire. `/usr/local/bin` Pour utiliser `bundle` avec une tâche `cron`, vous devez ajouter explicitement le chemin d'accès `/usr/local/bin` à la tâche cron. En outre, comme la variable d'environnement \$1PATH peut ne pas se développer dans la tâche `cron`, une bonne pratique consiste à ajouter explicitement à la tâche les informations de chemin d'accès nécessaires sans s'appuyer sur l'expansion de la variable \$1PATH. Les exemples suivants illustrent deux façons d'utiliser `bundle` dans une tâche `cron`.  

```
cron "my first task" do
  path "/usr/local/bin"
  minute "*/10"
  command "cd /srv/www/myapp/current && bundle exec my_command"
end
```

```
cron_env = {"PATH" => "/usr/local/bin"}
cron "my second task" do
  environment cron_env
  minute "*/10"
  command "cd /srv/www/myapp/current && /usr/local/bin/bundle exec my_command"
end
```

Si votre stack comporte plusieurs serveurs d'applications, l'attribution des `cronjob.rb` événements du cycle de vie de la couche PHP App Server n'est peut-être pas une approche idéale. Par exemple, comme la recette s'exécute sur toutes les instances de la couche, vous recevrez plusieurs rapports. Une meilleure approche consiste à utiliser une couche personnalisée pour s'assurer qu'un seul serveur envoie un rapport.

**Pour exécuter une recette sur une seule des instances d'une couche**

1. Créez une couche personnalisée appelée, par exemple, PHPAdmin et attribuez-la `cronjob.rb` à ses événements de configuration et de déploiement. Les couches personnalisées n'ont pas nécessairement à en faire beaucoup. Dans ce cas, PHPAdmin il suffit d'exécuter une recette personnalisée sur ses instances.

1. Attribuez l'une des instances de PHP App Server à AdminLayer. Si une instance appartient à plusieurs couches, OpsWorks Stacks exécute les recettes intégrées et personnalisées de chaque couche.

Comme une seule instance appartient au serveur d'applications PHP et aux PHPAdmin couches, elle ne `cronjob.rb` s'exécute que sur cette instance et vous ne recevez qu'un seul rapport.