Execução de trabalhos cron em instâncias do Linux - AWS OpsWorks

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Execução de trabalhos cron em instâncias do Linux

Importante

O AWS OpsWorks Stacks serviço chegou ao fim da vida útil em 26 de maio de 2024 e foi desativado para clientes novos e existentes. É altamente recomendável que os clientes migrem suas cargas de trabalho para outras soluções o mais rápido possível. Se você tiver dúvidas sobre migração, entre em contato com a AWS Support equipe no AWS re:POST ou por meio do Premium AWS Support.

Um trabalho cron do Linux direciona o daemon cron para executar um ou mais comandos em uma programação especificada. Por exemplo, suponha que sua pilha seja compatível com um aplicativo de comércio eletrônico PHP. Você pode configurar um trabalho cron para que o servidor envie um relatório de vendas em um horário especificado a cada semana. Para obter mais informações sobre cron, consulte cron na Wikipédia. Para obter mais informações sobre como executar um trabalho cron diretamente em uma instância ou computador baseado em Linux, consulte O que são cron e crontab, e como usá-los? (em inglês), no site da base de dados de conhecimento da Universidade de Indiana.

Embora você possa configurar manualmente os trabalhos cron em instâncias baseadas no Linux individuais ao conectar-se a eles com SSH e ao editar suas entradas crontab, uma das principais vantagens do AWS OpsWorks Stacks é que você pode direcioná-lo para executar a tarefa em uma camada de instâncias inteira. O procedimento a seguir descreve como configurar um trabalho cron em instâncias de uma camada PHP App Server, mas você pode usar a mesma abordagem com qualquer camada.

Para configurar um trabalho cron nas instâncias de uma camada
  1. Implemente um livro de receitas com uma receita com um recurso cron que configure o trabalho. O exemplo supõe que a receita se chama cronjob.rb; os detalhes da implementação serão descritos mais tarde. Para obter mais informações sobre livros de receitas e receitas, consulte Livros de receitas e receitas.

  2. Instale o livro de receitas em sua pilha. Para ter mais informações, consulte Instalação de livros de receitas personalizados.

  3. Faça com que o AWS OpsWorks Stacks execute a receita automaticamente nas instâncias da camada, atribuindo-a aos seguintes eventos do ciclo de vida. Para ter mais informações, consulte Execução automática de receitas.

    • Configuração — A atribuição cronjob.rb a esse evento faz com que as AWS OpsWorks pilhas executem a receita em todas as novas instâncias.

    • Implantar — A atribuição cronjob.rb a esse evento faz com que o AWS OpsWorks Stacks execute a receita em todas as instâncias on-line quando você implanta ou reimplanta um aplicativo na camada.

    Você também pode executar manualmente a receita em instâncias online usando o comando Execute Recipes da pilha. Para ter mais informações, consulte Executa comandos de pilha.

A seguir, o exemplo de cronjob.rb configura um trabalho cron para executar um aplicativo PHP implementado pelo usuário uma vez por semana que coleta os dados de vendas do servidor e envia um relatório por e-mail. Para obter mais exemplos de como usar um 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

O cron é um recurso do Chef que representa um trabalho cron. Quando o AWS OpsWorks Stacks executa a receita em uma instância, o provedor associado trata dos detalhes da configuração do trabalho.

  • job_name é um nome definido pelo usuário para o trabalho cron, como weekly report.

  • hour/minute/weekday especificam quando os comandos devem ser executados. Este exemplo executa os comandos todos os sábados à 1:10h.

  • command especifica os comandos a serem executados.

    Este exemplo executa dois comandos. O primeiro navega até o diretório /srv/www/myapp/current. O segundo executa o aplicativo mailing.php implementado pelo usuário, que coleta os dados de vendas e envia o relatório.

nota

Por padrão, o comando bundle não funciona com trabalhos cron. O motivo é que o AWS OpsWorks Stacks instala o bundler no diretório. /usr/local/bin Para usar bundle com um trabalho cron, você deve adicionar explicitamente o caminho /usr/local/bin ao trabalho cron. Além disso, como a variável de ambiente $PATH não pode se expandir no trabalho cron, uma melhor prática é adicionar explicitamente qualquer informação sobre caminho necessária ao trabalho sem depender da expansão da variável $PATH. Os exemplos a seguir mostram duas maneiras de usar bundle em um trabalho 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

Se a sua pilha tiver vários servidores de aplicativos, a atribuição de cronjob.rb aos eventos de ciclo de vida da camada PHP App Server pode não ser uma abordagem ideal. Por exemplo, a receita é executada em todas as instâncias da camada e, portanto, você receberá vários relatórios. Uma abordagem melhor é usar uma camada personalizada para garantir que apenas um servidor envie um relatório.

Para executar uma receita em apenas uma das instâncias de uma camada
  1. Crie uma camada personalizada chamada, por exemplo, PHPAdmin e atribua cronjob.rb a seus eventos de Instalação e Implantação. As camadas personalizadas não precisam necessariamente fazer muito. Neste caso, o PHPAdmin só executa uma receita personalizada em suas instâncias.

  2. Atribua uma das instâncias do PHP App Server AdminLayer a. Se uma instância pertencer a mais de uma camada, o AWS OpsWorks Stacks executa as receitas integradas e personalizadas de cada camada.

Como apenas uma instância pertence às camadas PHP App Server e PHPAdmin, o cronjob.rb é executado apenas na instância e você recebe apenas um relatório.