Ejecución de trabajos cron en instancias de Linux - AWS OpsWorks

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecución de trabajos cron en instancias de Linux

importante

El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los actuales. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tienes preguntas sobre la migración, ponte en contacto con el AWS Support equipo en AWS Re:post o a través de Premium AWS Support.

Un trabajo cron de Linux indica al daemon cron que ejecute uno o varios comandos siguiendo una programación especificada. Por ejemplo, supongamos que su pila admite una aplicación de e-commerce PHP. Puede configurar un trabajo cron para que el servidor le envíe un informe de ventas a una hora determinada de cada semana. Para obtener más información sobre cron, consulte cron en Wikipedia. Para obtener más información acerca de cómo ejecutar un trabajo cron directamente en una instancia o un equipo basado en Linux, consulte What are cron and crontab, and how do I use them? en el sitio web de la base de conocimientos de la Universidad de Indiana.

Aunque puede configurar manualmente trabajos cron en instancias individuales basadas en Linux conectándose a ellas con SSH y editando sus entradas crontab, una de las principales ventajas de AWS OpsWorks Stacks es que puede indicarle que ejecute la tarea en una capa completa de instancias. En el procedimiento siguiente se describe cómo configurar un trabajo cron en las instancias de una capa del servidor de aplicaciones PHP, pero puede utilizar el mismo enfoque con cualquier capa.

Para configurar un trabajo cron en las instancias de una capa
  1. Implemente un libro de recetas con una receta que tenga un recurso cron que configure el trabajo. En este ejemplo se presupone que la receta se denomina cronjob.rb; los detalles de implementación se describen más tarde. Para obtener más información acerca de los libros de recetas y las recetas, consulte Cookbooks and Recipes.

  2. Instale el libro de recetas en la pila. Para obtener más información, consulte Instalación de libros de recetas personalizados.

  3. Haz que AWS OpsWorks Stacks ejecute la receta automáticamente en las instancias de la capa asignándola a los siguientes eventos del ciclo de vida. Para obtener más información, consulte Ejecución automática de recetas.

    • Configuración: cronjob.rb al asignar este evento, AWS OpsWorks Stacks debe ejecutar la receta en todas las instancias nuevas.

    • Implementación: cronjob.rb al asignar este evento, AWS OpsWorks Stacks debe ejecutar la receta en todas las instancias en línea al implementar o volver a implementar una aplicación en la capa.

    También puede ejecutar manualmente la receta en las instancias online ejecutando el comando de pila Execute Recipes. Para obtener más información, consulte Ejecución de comandos de pila.

A continuación se presenta el ejemplo cronjob.rb en el que se configura un trabajo cron para que ejecute una vez a la semana una aplicación PHP implementada por el usuario que recopila los datos de ventas en el servidor y envía por correo un informe. Para obtener más ejemplos de cómo utilizar un recurso cron, consulte cron.

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

cron es un recurso de Chef que representa un trabajo cron. Cuando AWS OpsWorks Stacks ejecuta la receta en una instancia, el proveedor asociado se encarga de los detalles de la configuración del trabajo.

  • job_name es un nombre definido por el usuario para el trabajo cron, como weekly report.

  • hour/minute/weekday especifica cuándo deben ejecutarse los comandos. En este ejemplo se ejecutan los comandos cada sábado a la 1:10 de la mañana.

  • command especifica los comandos que deben ejecutarse.

    En este ejemplo se ejecutan dos comandos. El primero navega hasta el directorio /srv/www/myapp/current. El segundo ejecuta la aplicación mailing.php implementada por el usuario, que recopila los datos de ventas y envía el informe.

nota

El comando bundle no funciona con trabajos cron de forma predeterminada. La razón es que AWS OpsWorks Stacks instala el paquete en el directorio. /usr/local/bin Para utilizar bundle con un trabajo cron, debe añadir de forma explícita la ruta /usr/local/bin al trabajo cron. Además, como es posible que la variable de entorno $PATH no se amplíe en el trabajo cron, una práctica recomendada es añadir explícitamente cualquier información de ruta necesaria al trabajo sin recurrir a la expansión de las variables $PATH. Los siguientes ejemplos muestran dos maneras de utilizar bundle en un trabajo 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 la pila tiene varios servidores de aplicaciones, puede que asignar cronjob.rb a los eventos del ciclo de vida de la capa del servidor de aplicaciones PHP no sea el enfoque más adecuado. Por ejemplo, la receta se ejecuta en todas las instancias de la capa, por lo que recibirá varios informes. Es mejor usar una capa personalizada para asegurarse de que solo un servidor envíe un informe.

Para ejecutar una receta en solo una de las instancias de una capa
  1. Cree una capa personalizada denominada, por ejemplo, PHPAdmin y asigne cronjob.rb a sus eventos Setup y Deploy. No es necesario que las capas personalizadas hagan mucho. En este caso, PHPAdmin solo se ejecuta una receta personalizada en sus instancias.

  2. Asigne una de las instancias de PHP App Server a. AdminLayer Si una instancia pertenece a más de una capa, AWS OpsWorks Stacks ejecuta las recetas integradas y personalizadas de cada capa.

Dado que solo una instancia pertenece a las capas Servidor de aplicaciones PHP y PHPAdmin, cronjob.rb se ejecuta únicamente en dicha instancia y usted solo recibe un informe.