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
Important
Le AWS OpsWorks Stacks le 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 le AWS Support L'équipe sur AWS Re:post ou via
Une tâche cron Linux demande au processus cron d'exécuter une ou plusieurs commandes selon un calendrier spécifié. Supposons, par exemple, que votre stack supporte une application de PHP commerce électronique. 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
Bien que vous puissiez configurer manuellement des cron
tâches sur des instances Linux individuelles en vous connectant à celles-ci et en modifiant leurs crontab
entréesSSH, l'un des principaux avantages de AWS OpsWorks Stacks signifie que vous pouvez lui demander 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
-
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 nommecronjob.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. -
Installez le livre de recettes sur votre pile. Pour de plus amples informations, veuillez consulter Installation de livres de recettes personnalisés.
-
Avoir AWS OpsWorks Les piles exécutent la recette automatiquement 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.
-
Configuration — Affecter des
cronjob.rb
directives à cet événement AWS OpsWorks Des piles pour exécuter la recette sur toutes les nouvelles instances. -
Déployer — Affecter des
cronjob.rb
directives à cet événement AWS OpsWorks Des piles pour 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. -
L'cronjob.rb
exemple suivant définit une tâche cron pour exécuter une fois par semaine une PHP application implémentée par l'utilisateur qui collecte les données de vente sur le serveur et envoie un rapport par courrier électronique. Pour plus d'exemples d'utilisation d'une ressource cron, consultez 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 AWS OpsWorks Stacks exécute la recette sur une instance, le fournisseur associé gère les détails de configuration de la tâche.
-
est un nom défini par l'utilisateur pour la tâchejob_name
cron
, tel queweekly 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'applicationmailing.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 AWS 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. De plus, étant donné que la variable d'PATHenvironnement $ peut ne pas s'étendre au cours de la cron
tâche, il est recommandé d'ajouter explicitement les informations de chemin nécessaires à la tâche sans compter sur le développement de la PATH variable $. 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
-
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. -
Attribuez l'une des instances de PHP l'App Server à AdminLayer. Si une instance appartient à plusieurs couches, AWS OpsWorks Stacks exécute les recettes intégrées et personnalisées de chaque couche.
Comme une seule instance appartient à l'PHPApp Server et aux PHPAdmin couches, elle ne cronjob.rb
s'exécute que sur cette instance et vous ne recevez qu'un seul rapport.