Exécution de tâches cron sur les instances Linux - AWS OpsWorks

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 AWS Support premium.

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 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 sur le site de la base de connaissances de l'université d'Indiana.

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
  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.

  2. Installez le livre de recettes sur votre pile. Pour de plus amples informations, veuillez consulter Installation de livres de recettes personnalisés.

  3. 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.rbexemple 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.

  • 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 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
  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.

  2. 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.