Executar tarefas em segundo plano com o WebJobs no Serviço de Aplicativo do Azure

Observação

O WebJobs para contêineres do Windows, códigos do Linux e contêineres do Linux está em versão prévia. O código do WebJobs para Windows tem disponibilidade geral e não está em versão prévia.

Implante WebJobs usando o portal do Azure para carregar um arquivo executável ou script. Você pode executar tarefas em segundo plano no Serviço de Aplicativo do Azure.

Se, em vez do Serviço de Aplicativo do Azure, você estiver usando o Visual Studio 2019 para desenvolver e implantar WebJobs, confira Implantar WebJobs usando o Visual Studio.

Visão geral

O WebJobs é um recurso do Serviço de Aplicativo do Azure que permite executar um programa ou script na mesma instância de um aplicativo Web. Não há nenhum custo extra para usar WebJobs.

Você pode usar o SDK do Azure WebJobs com o WebJobs para simplificar muitas tarefas de programação. Para obter mais informações, consulte O que é o SDK de Trabalhos Web.

O Azure Functions oferece outra maneira de executar programas e scripts. Para obter uma comparação entre o WebJobs e o Functions, consulte Escolher entre o Flow, Aplicativos Lógicos, Functions e WebJobs.

Tipos de WebJob

Tipos de arquivo com suporte para scripts ou programas

Há suporte para os tipos de arquivo a seguir:
.cmd, .bat e .exe (usando o cmd do Windows)
.ps1 (usando o PowerShell)
.sh (usando o Bash)
.php (usando o PHP)
.py (usando o Python)
.js (usando o Node.js)
.jar (usando o Java)

Os runtimes necessários para executar esses tipos de arquivo já estão instalados na instância do aplicativo Web.

WebJobs contínuo versus disparado

A tabela a seguir descreve as diferenças entre o WebJobs contínuo e disparado:

Contínuo Disparado
É iniciado imediatamente quando o WebJob é criado. Para impedir o encerramento do trabalho, o programa ou o script normalmente faz seu trabalho dentro de um loop infinito. Se o trabalho for encerrado, você poderá reiniciá-lo. Normalmente usado com o SDK do WebJobs. É iniciado apenas quando disparado manualmente ou de acordo com um agendamento.
É executado em todas as instâncias nas quais o aplicativo Web é executado. Opcionalmente, você pode restringir o WebJob a uma única instância. É executado em uma única instância selecionada pelo Azure para balanceamento de carga.
Dá suporte à depuração remota. Não dá suporte à depuração remota.
O código é implantado em \site\wwwroot\app_data\Jobs\Continuous. O código é implantado em \site\wwwroot\app_data\Jobs\Triggered.

Observação

Um aplicativo Web pode atingir o tempo limite após 20 minutos de inatividade, e somente as solicitações ao aplicativo Web real podem redefinir o temporizador. As ações de exibir a configuração do aplicativo no portal do Azure ou fazer solicitações para o site de ferramentas avançadas (https://<app_name>.scm.azurewebsites.net) não reiniciam o temporizador. Se você definir o aplicativo Web que hospeda seu trabalho para ser executado continuamente, executado por agenda ou usar gatilhos orientados a eventos, habilite a configuração Always On na página Configuração do Azure do aplicativo Web. A configuração Always On ajuda a garantir que esses tipos de WebJobs sejam executados de maneira confiável. Este recurso está disponível apenas nos tipos de preço Básico, Standard e Premium.

Criar um WebJob contínuo

Importante

Se o controle do código-fonte estiver configurado no seu aplicativo, implante os WebJobs como parte da integração do controle do código-fonte. Depois de configurar o controle do código-fonte no seu aplicativo, não é possível adicionar WebJobs do portal do Azure.

  1. No portal do Azure, acesse a página Serviço de Aplicativo do aplicativo Web, aplicativo de API ou aplicativo móvel do Serviço de Aplicativo.

  2. No painel esquerdo, selecione WebJobs e, em seguida, selecione Adicionar.

    Captura de tela mostrando como adicionar um WebJob em um aplicativo do Serviço de Aplicativo no portal.

  3. Preencha as configurações Adicionar WebJob conforme especificado na tabela e selecione Criar WebJob.

    Captura de tela mostrando como configurar um WebJob contínuo de várias instâncias em um aplicativo do Serviço de Aplicativo.

    Configuração Valor de exemplo Descrição
    Nome myContinuousWebJob Um nome que seja exclusivo em um aplicativo do Serviço de Aplicativo. Deve começar com uma letra ou um número e não pode conter caracteres especiais além de"-" e "_".
    Upload de arquivos ConsoleApp.zip Um arquivo .zip que contém o arquivo executável ou de script, bem como os arquivos de suporte necessários para executar o programa ou o script. Os tipos de executável ou arquivo de script com suporte são listados na seção Tipos de arquivo com suporte.
    Tipo Contínuo Os tipos do WebJob foram descritos anteriormente neste artigo.
    Escala Várias instâncias Disponível somente para WebJobs Contínuos. Determina se o programa ou script é executado em todas as instâncias ou apenas em uma. A opção de execução em várias instâncias não se aplica aos tipos de preço Gratuito ou Compartilhado.
  4. O novo WebJob é exibido na página WebJobs. Se você vir uma mensagem que diz que o WebJob foi adicionado, mas ele não aparecer, clique em Atualizar.

  5. Para interromper ou reiniciar um WebJob contínuo, clique com o botão direito do mouse no WebJob na lista e clique em Parar ou Iniciar e, em seguida, confirme sua seleção.

    Captura de tela mostrando como criar um WebJob no portal do Azure.

Criar um WebJob disparado manualmente

  1. No portal do Azure, acesse a página Serviço de Aplicativo do aplicativo Web, aplicativo de API ou aplicativo móvel do Serviço de Aplicativo.

  2. No painel esquerdo, selecione WebJobs e, em seguida, selecione Adicionar.

    Captura de tela mostrando como adicionar um WebJob em um aplicativo do Serviço de Aplicativo no portal (WebJob disparado manualmente).

  3. Preencha as configurações Adicionar WebJob conforme especificado na tabela e selecione Criar WebJob.

    Captura de tela mostrando como configurar um WebJob disparado manualmente em um aplicativo do Serviço de Aplicativo.

    Configuração Valor de exemplo Descrição
    Nome myTriggeredWebJob Um nome que seja exclusivo em um aplicativo do Serviço de Aplicativo. Deve começar com uma letra ou um número e não pode conter caracteres especiais além de"-" e "_".
    Upload de arquivos ConsoleApp1.zip Um arquivo .zip que contém o arquivo executável ou de script, bem como os arquivos de suporte necessários para executar o programa ou o script. Os tipos de executável ou arquivo de script com suporte são listados na seção Tipos de arquivo com suporte.
    Tipo Disparado Os tipos do WebJob foram descritos anteriormente neste artigo.
    Gatilhos Manual
  4. O novo WebJob é exibido na página WebJobs. Se você vir uma mensagem que diz que o WebJob foi adicionado, mas ele não aparecer, clique em Atualizar.

  5. Para executar um WebJob disparado manualmente, clique com o botão direito do mouse no WebJob na lista, selecione o botão Executar e confirme sua seleção.

    Captura de tela mostrando como criar um WebJob disparado manualmente no portal do Azure.

Criar um WebJob agendado

Um WebJob agendado também é disparado. Você pode agendar o disparo automático de acordo com o agendamento especificado.

  1. No portal do Azure, acesse a página Serviço de Aplicativo do aplicativo Web, aplicativo de API ou aplicativo móvel do Serviço de Aplicativo.

  2. No painel esquerdo, selecione WebJobs e, em seguida, selecione Adicionar.

    Captura de tela que mostra como adicionar um WebJob em um aplicativo do Serviço de Aplicativo no portal (WebJob agendado).

  3. Preencha as configurações Adicionar WebJob conforme especificado na tabela e selecione Criar WebJob.

    Captura de tela mostrando como configurar um WebJob agendado em um aplicativo do Serviço de Aplicativo.

    Configuração Valor de exemplo Descrição
    Nome myScheduledWebJob Um nome que seja exclusivo em um aplicativo do Serviço de Aplicativo. Deve começar com uma letra ou um número e não pode conter caracteres especiais além de"-" e "_".
    Upload de arquivos ConsoleApp.zip Um arquivo .zip que contém o arquivo executável ou de script, bem como os arquivos de suporte necessários para executar o programa ou o script. Os tipos de executável ou arquivo de script com suporte são listados na seção Tipos de arquivo com suporte.
    Tipo Disparado Os tipos do WebJob foram descritos anteriormente neste artigo.
    Gatilhos Agendado Para que o agendamento funcione de modo confiável, habilite o recurso AlwaysOn. O AlwaysOn está disponível apenas nos tipos de preço Básico, Standard e Premium.
    Expressão CRON 0 0/20 * * * * As expressões CRON são descritas na seção a seguir.
  4. O novo WebJob é exibido na página WebJobs. Se você vir uma mensagem que diz que o WebJob foi adicionado, mas ele não aparecer, clique em Atualizar.

  5. O WebJob agendado é executado no agendamento definido pela expressão CRON. Para executar um WebJob disparado manualmente a qualquer hora, clique com o botão direito do mouse no WebJob na lista, selecione o botão Executar e confirme sua seleção.

    Captura de tela mostrando como criar um WebJob agendado manualmente no portal do Azure.

Expressões NCRONTAB

Insira uma expressão NCRONTAB no portal ou inclua um arquivo settings.job na raiz de arquivo .zip do WebJob, como no seguinte exemplo:

{
    "schedule": "0 */15 * * * *"
}

Para saber mais, veja Agendamento de um WebJob disparado.

Observação

O fuso horário padrão usado para executar expressões CRON é o UTC (Tempo Universal Coordenado). Para que a expressão CRON seja executada com base em outro fuso horário, crie uma configuração de aplicativo para o aplicativo de funções denominada WEBSITE_TIME_ZONE. Para saber mais, confira Fusos horários do NCRONTAB.

Gerenciar WebJobs

Você pode gerenciar o estado de execução de WebJobs individuais em execução no seu site no portal do Azure. Acesse Configurações>WebJobs, escolha o WebJob e será possível iniciá-lo e pará-lo. Você também pode exibir e modificar a senha do webhook que executa o WebJob.

Você também pode adicionar uma configuração de aplicativo chamada WEBJOBS_STOPPED com o valor 1 para interromper todos os WebJobs em execução no seu site. Isso pode ajudar a impedir que WebJobs conflitantes sejam executados em slots de preparo e produção. Da mesma forma, você pode usar o valor 1 na configuração de WEBJOBS_DISABLE_SCHEDULE para desativar WebJobs disparados no site ou em um slot de preparo. Em slots, lembre-se de habilitar a opção de Configuração de slot de implantação para que a configuração em si não seja trocada.

Exibir o histórico do trabalho

  1. Para o WebJob que você deseja ver, selecione Logs.

    Captura de tela que mostra como acessar logs em um WebJob.

  2. Na página Detalhes do WebJob, selecione uma hora para ver os detalhes de uma execução.

    Captura de tela que mostra como escolher uma execução de WebJob para ver seus logs detalhados.

  3. Na página Detalhes da Execução do WebJob, você pode selecionar Baixar para obter um arquivo de texto dos logs ou selecionar o link de trilha de WebJobs na parte superior da página para ver os logs de um WebJob diferente.

Status do WebJob

Confira abaixo uma lista de status comuns de um WebJob:

  • Inicializar O aplicativo foi iniciado e o WebJob está passando pelo processo de inicialização.
  • Iniciando O WebJob está iniciando.
  • Em execução O WebJob está em execução.
  • PendingRestart Um WebJob contínuo é encerrado em menos de dois minutos depois de iniciado por qualquer motivo e o Serviço de Aplicativo aguarda 60 segundos antes de reiniciar o WebJob. Se o WebJob contínuo for encerrado após a marca dos dois minutos, o Serviço de Aplicativo não aguardará os 60 segundos e reiniciará o WebJob imediatamente.
  • Interrompido O WebJob foi interrompido (geralmente do portal do Azure) e atualmente não está em execução e não será executado até você iniciá-lo novamente manualmente, mesmo para um WebJob contínuo ou agendado.
  • Anulado Pode ocorrer por muitos motivos, como quando um WebJob de execução longa atinge o marcador de tempo limite.

Próximas etapas

O SDK do WebJobs do Azure pode ser usado com o WebJobs para simplificar muitas tarefas de programação. Para obter mais informações, consulte O que é o SDK de Trabalhos Web.