

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
<a name="workingcookbook-extend-cron"></a>

**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](https://repost.aws/) ou por meio do Premium [AWS Support](https://aws.amazon.com/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](http://en.wikipedia.org/wiki/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?](https://kb.iu.edu/d/afiz) (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 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](workingcookbook.md).

1. Instale o livro de receitas em sua pilha. Para obter mais informações, consulte [Instalação de livros de receitas personalizados](workingcookbook-installingcustom-enable.md).

1. Faça com que o OpsWorks Stacks execute a receita automaticamente nas instâncias da camada, atribuindo-a aos seguintes eventos do ciclo de vida. Para obter mais informações, consulte [Execução automática de receitas](workingcookbook-assigningcustom.md).
   + **Configuração** — A atribuição `cronjob.rb` a esse evento faz com que o OpsWorks Stacks execute a receita em todas as novas instâncias.
   + **Implantar** — A atribuição `cronjob.rb` a esse evento faz com que o 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 obter mais informações, consulte [Executa comandos de pilha](workingstacks-commands.md).

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](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
```

O `cron` é um recurso do Chef que representa um trabalho `cron`. Quando o 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 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 \$1PATH 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 \$1PATH. 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 `cronjob.rb` atribua aos seus eventos de configuração e implantação. As camadas personalizadas não precisam necessariamente fazer muito. Nesse caso, PHPAdmin basta executar uma receita personalizada em suas instâncias.

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

Como apenas uma instância pertence ao PHP App Server e às PHPAdmin camadas, `cronjob.rb` é executada somente nessa instância e você recebe apenas um relatório.