One place for hosting & domains

      tarefas

      Como usar o Cron para automatizar tarefas no CentOS 8


      Shaun Lewis escreveu uma versão anterior deste tutorial.

      Introdução

      O Cron é um programa daemon de agendamento de trabalhos baseado em tempo, encontrado em sistemas operacionais do tipo Unix, incluindo as distribuições do Linux. O Cron executa em segundo plano e tarefas agendadas com o cron, conhecidas como “cron jobs” (trabalhos do cron), são executadas automaticamente, o que torna o cron útil para automatizar tarefas relacionadas à manutenção.

      Este guia fornece uma visão geral sobre como programar tarefas usando a sintaxe especial do cron. Ele também revisa alguns atalhos que você pode usar para tornar as agendas de trabalho mais fáceis de escrever e de entender.

      Pré-requisitos

      Para completar este guia, você precisará de acesso a um computador que executa em CentOS 8. Pode ser sua máquina local, uma máquina virtual ou um servidor virtual privado.

      Independentemente do tipo de computador que você usar para acompanhar este guia, ele deverá possuir um usuário não raiz com privilégios administrativos configurados. Para configurar isso, siga as instruções de nosso Guia de configuração inicial de servidor para o CentOS 8.

      Instalando o Cron

      Por padrão, quase toda distribuição do Linux tem alguma forma do cron instalada. No entanto, se estiver usando uma máquina com CentOS na qual o cron não estiver instalado, instale-o usando o comando dnf.

      Antes de instalar o cron em uma máquina CentOS, atualize o índice de pacotes local do computador:

      Então, instale o daemon cron com o seguinte comando:

      • sudo dnf install crontabs

      Esse comando solicitará que você confirme se deseja instalar o pacote crontabs e suas dependências. Faça isso pressionando y e, depois, ENTER.

      Isso instalará o cron em seu sistema, mas será necessário iniciar o daemon manualmente. Você também precisará garantir que ele esteja configurado para executar sempre que o servidor for iniciado. Você pode realizar ambas essas ações com o comando systemctl.

      Para iniciar o daemon cron, execute o seguinte comando:

      • sudo systemctl start crond.service

      Para definir o cron para executar sempre que o servidor for iniciado, digite:

      • sudo systemctl enable crond.service

      Depois disso, o cron estará instalado no seu sistema, pronto para que você comece a agendar trabalhos.

      Entendendo como o Cron funciona

      Os trabalhos do cron são registrados e gerenciados em um arquivo especial conhecido como crontab. Cada perfil de usuário no sistema pode ter seu próprio arquivo crontab – onde o usuário poderá agendar trabalhos – que fica armazenado em /var/spool/cron/.

      Para agendar um trabalho, simplesmente abra seu crontab para edição e adicione uma tarefa escrita na forma de uma expressão cron. A sintaxe para expressões cron pode ser dividida em dois elementos: o agendamento e o comando a executar.

      O comando pode ser praticamente qualquer comando que você executaria normalmente na linha de comando. O componente de agendamento da sintaxe é dividido em 5 campos diferentes, os quais vêm escritos na seguinte ordem:

      Campo Valores permitidos
      minuto 0-59
      hora 0-23
      Dia do mês 1-31
      mês 1-12 ou JAN-DEC
      Dia da semana 0-6 ou SUN-SAT

      Juntas, as tarefas agendadas em um arquivo crontab são estruturadas da seguinte forma:

      minute hour day_of_month month day_of_week command_to_run
      

      Apresentamos aqui um exemplo funcional de uma expressão cron. Essa expressão executa o comando curl http://www.google.com, toda terça-feira, às 5:30 PM:

      30 17 * * 2 curl http://www.google.com
      

      Também existem alguns caracteres especiais que você pode incluir no componente de agendamento de uma expressão cron para facilitar o agendamento:

      • *: em expressões cron, um asterisco é uma variável curinga que representa “todos”. Assim, uma tarefa agendada com * * * * * ... será executada a cada minuto, de cada hora, de cada dia, de cada mês.
      • ,: vírgulas separar os valores do agendamento para formar uma lista. Se quiser executar uma tarefa no início e na metade de cada hora, em vez de escrever duas tarefas separadas (por exemplo, 0 * * * * ... e 30 * * * * ...), poderia conseguir a mesma funcionalidade com um (0,30 * * * * ...).
      • -: um hífen representa um intervalo de valores no campo da agenda. Em vez de ter 30 tarefas agendadas separadamente em relação a um comando que você quer executar nos primeiros 30 minutos de cada hora (como em 0 * * * * ..., 1 * * * * ..., 2 * * * * ... e assim por diante), bastaria que você as agendasse como 0-29 * * * * ....
      • /: utilize uma barra com um asterisco para expressar um valor de etapa. Por exemplo, em vez de escrever oito tarefas cron separadas para executar um comando a cada três horas (como em: 0 0 * * * ..., 0 3 * * * ..., 0 6 * * * ... e assim por diante), você poderia agendá-las para executar da seguinte maneira: 0 */3 * * * ....

      Nota: você não pode expressar valores de etapa de modo arbitrário; você só pode usar números inteiros que se dividam de maneira uniforme no intervalo permitido pelo campo em questão. Por exemplo, no campo “horas”, você só poderia usar uma barra antes de 1, 2, 3, 4, 6, 8 ou 12.

      Apresentamos a seguir, outros exemplos de como usar o componente de agendamento do cron:

      • * * * * * – Executa o comando a cada minuto.
      • 12 * * * * – Executa o comando 12 minutos após cada hora.
      • 0,15,30,45 * * * * – Executa o comando a cada 15 minutos.
      • */15 * * * * – Executa o comando a cada 15 minutos.
      • 0 4 * * * – Executar o comando todo dia às 4:00 AM.
      • 0 4 * * 2-4 – Executar o comando toda terça-feira, quarta-feira e quinta-feira às 4:00 AM.
      • 20,40 */8 * 7-12 * – Executar o comando no vigésimo e quadragésimo minuto de cada oitava hora, todos os dias dos últimos 6 meses do ano.

      Se acha isso tudo um pouco confuso ou se quiser ajuda sobre como escrever os agendamentos de suas próprias tarefas cron, o Cronitor fornece um editor de expressão da agenda do cron bastante útil, chamado “Crontab Guru”, que você pode usar para verificar se seus agendamentos do cron são válidos.

      Gerenciando os crontabs

      Assim que tiver escolhido uma agenda e souber o trabalho que deseja executar, você precisará colocá-lo em um lugar onde seu daemon consiga lê-lo.

      Como mencionado anteriormente, um crontab é um arquivo especial que mantém a agenda de trabalhos que o cron executará. No entanto, esses agendamentos não foram planejados para edição direta. Em vez disso, é recomendável que você utilize o comando crontab. Isso permite que você edite o crontab do perfil do seu usuário sem alterar seus privilégios com o sudo. O comando crontab também revelará se há erros de sintaxe no crontab, ao passo que editá-lo diretamente não revelará.

      É possível editar seu crontab com o seguinte comando:

      Isso abrirá seu crontab no editor de texto padrão do seu perfil de usuário.

      Nota: em novos servidores CentOS 8, por padrão, o comando crontab -e abrirá o crontab do seu usuário com o vi. O vi é um editor de texto extremamente eficaz e flexível; porém, para os usuários que não têm experiência com ele, o vi pode parecer um pouco lento.

      Se quiser usar um editor de texto mais acessível como seu editor padrão do crontab, instale e configure o nano como tal.

      Para tanto, instale o nano com o dnf:

      Quando solicitado, pressione y e, depois, ENTER para confirmar que deseja instalar o nano.

      Para definir o nano como o seu editor visual padrão de perfil de usuário, abra o arquivo .bash_profile para edição. Agora que o instalou, você pod fazer o seguinte com o nano:

      No final do arquivo, adicione a seguinte linha:

      ~/.bash_profile

      . . .
      export VISUAL="nano"
      

      Isso define a variável de ambiente VISUAL para o nano. A VISUAL é uma variável de ambiente Unix que muitos programas — incluindo o crontab — invocam para editar um arquivo. Após adicionar essa linha, salve e feche o arquivo, pressionando CTRL + X, Y e, depois, ENTER.

      Em seguida, recarregue o .bash_profile para que o shell capte a nova mudança:

      Assim que estiver no editor, você pode preencher sua agenda com cada trabalho em uma nova linha. Caso contrário, você pode salvar e fechar o crontab por enquanto. Se você tiver aberto o seu crontab com o vi – o editor de texto padrão do CentOS 8, você pode salvar e fechar o crontab, pressionando ESC para garantir que esteja no modo de comando do vi. Em seguida, digite :x e pressione ENTER.

      Observe que,nos sistemas Linux, há outro crontab armazenado no diretório /etc/. Trata-se de um crontab que abrange o sistema todo e que tem um campo adicional para o perfil de usuário sob o qual cada trabalho do cron deve ser executado. Este tutorial se concentra em crontabs específicos do usuário. Porém, se você quisesse editar o crontab no âmbito do sistema, poderia fazer isso com o seguinte comando:

      Se quiser visualizar o conteúdo do seu crontab, sem editá-lo, você pode usar o seguinte comando:

      É possível apagar seu crontab com o seguinte comando:

      Aviso: o comando a seguir não irá pedir que você confirme se deseja apagar seu crontab. Apenas execute-o caso tenha certeza de que deseja apagá-lo.

      Esse comando excluirá o crontab do usuário imediatamente. No entanto, você pode incluir o sinalizador -i para fazer com que o comando peça para você confirmar se realmente deseja excluir o crontab do usuário:

      Output

      crontab: really delete sammy's crontab?

      Quando solicitado, você deve digitar y para excluir o crontab ou n para cancelar a exclusão.

      Gerenciando o resultado do trabalho do cron

      Como os trabalhos do cron são executados em segundo plano, nem sempre fica aparente se eles foram executados com sucesso. Agora que sabe como usar o comando crontab e como agendar um trabalho do cron, você pode começar a experimentar maneiras diferentes de redirecionar o resultado dos trabalhos do cron para ajudar você a monitorar se eles foram executados com sucesso.

      Se tiver um agente de transferência de mensagens — como o Sendmail — instalado e configurado corretamente no seu servidor, você pode enviar o resultado das tarefas do cron para o endereço de e-mail associado ao seu perfil de usuário do Linux. Também é possível especificar manualmente um endereço de e-mail, colocando uma definição MAILTO no topo do crontab.

      Por exemplo, você poderia adicionar as linhas a seguir a um crontab. Tais linhas incluem uma instrução MAILTO, seguida de um exemplo de endereço de e-mail, uma diretiva SHELL que indica o shell a executar (bash, neste exemplo), uma diretiva HOME apontando para o caminho no qual procurar o binário do cron e uma única tarefa do cron:

      . . .
      
      MAILTO="example@digitalocean.com"
      SHELL=/bin/bash
      HOME=/
      
      * * * * * echo ‘Run this command every minute’
      

      Esse trabalho em particular retornará “Run this command every minute” (Executar este comando a cada minuto) e tal resultado será enviado por e-mail a cada minuto para o endereço especificado após a diretiva MAILTO.

      Também é possível redirecionar o resultado de uma tarefa do cron para um arquivo de registro ou para um local vazio para evitar receber um e-mail com o resultado.

      Para anexar o resultado de um comando agendado a um arquivo de registro, adicione >> ao final do comando, seguido do nome e local de um arquivo de registro de sua escolha, como no exemplo abaixo:

      * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log
      

      Vamos supor que você queira usar o cron para executar um script, mas mantê-lo em execução em segundo plano. Para fazer isso, poderia redirecionar o resultado do script para um local vazio, como /dev/null, o que excluirá prontamente quaisquer dados escritos nele. Por exemplo, o trabalho do cron a seguir executa um script PHP em segundo plano:

      * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
      

      Este trabalho do cron também redireciona o erro padrão — representado por 2 — para o resultado padrão (>&1). Como o resultado padrão já está sendo redirecionado para /dev/null, isso permite essencialmente que o script seja executado silenciosamente. Mesmo se o crontab possuir uma instrução MAILTO, o resultado do comando não será enviado para o endereço de e-mail especificado.

      Restringindo o acesso

      É possível gerenciar quais usuários têm permissão para usar o comando crontab com os arquivos cron.allow e cron.deny, sendo que ambos ficam armazenados no diretório /etc/. Se o arquivo cron.deny existir, qualquer usuário listado nele estará impedido de editar seu crontab. Se o cron.allow existir, apenas os usuários listados nele poderão editar seus crontabs. Se ambos os arquivos existirem e o mesmo usuário estiver listado em cada um deles, o arquivo cron.allow irá substituir o cron.deny e o usuário conseguirá editar seu crontab.

      Por exemplo, para negar acesso a todos os usuários e depois dar acesso ao usuário ishmael, você poderia usar a seguinte sequência de comandos:

      • sudo echo ALL >>/etc/cron.deny
      • sudo echo ishmael >>/etc/cron.allow

      Primeiro, bloqueamos todos os usuários, anexando ALL ao arquivo cron.deny. Em seguida, ao adicionar o nome de usuário ao arquivo cron.allow, damos acesso ao perfil do usuário ishmael para executar trabalhos do cron.

      Note que se um usuário tiver privilégios sudo, ele pode editar o crontab de outro usuário com o seguinte comando:

      No entanto, se o cron.deny existir e o usuário estiver listado nele, mas não estiver listado no cron.allow, você receberá o seguinte erro após executar o comando anterior:

      Output

      The user user cannot use this program (crontab)

      Por padrão, a maioria dos daemons cron presumirão que todos os usuários têm acesso ao cron, a menos que o cron.allow ou o cron.deny existirem.

      Sintaxe especial

      Também existem vários comandos abreviados que você pode usar no seu arquivo crontab para ajudar a simplificar o agendamento de trabalhos. São essencialmente atalhos para o equivalente numérico do agendamento especificado:

      Atalho Abreviação para
      @hourly 0 * * * *
      @daily 0 0 * * *
      @weekly 0 0 * * 0
      @monthly 0 0 1 * *
      @yearly 0 0 1 1 *

      Nota: nem todos os daemons cron podem analisar essa sintaxe (especialmente versões mais antigas); assim, verifique novamente se a sintaxe funciona antes de confiar nela.

      Além disso, a abreviação @reboot irá executar qualquer comando que venha depois dela, sempre que o servidor for iniciado:

      @reboot echo "System start up"
      

      Usar esses atalhos sempre que possível pode ajudar a facilitar a interpretação do agendamento de tarefas no seu crontab.

      Conclusão

      O Cron é um utilitário flexível e eficaz, que pode reduzir a carga de trabalho de muitas tarefas associadas à administração do sistema. Quando combinado com scripts de shell, é possível automatizar tarefas que normalmente são tediosas ou complicadas.



      Source link

      Como usar o Cron para automatizar tarefas no Ubuntu 18.04


      Shaun Lewis escreveu uma versão anterior deste tutorial.

      Introdução

      O Cron é um programa daemon de agendamento de trabalhos baseado em tempo, encontrado em sistemas operacionais do tipo Unix, incluindo as distribuições do Linux. O Cron executa em segundo plano e as tarefas agendadas com o cron, conhecidas como “cron jobs” (trabalhos do cron), são executadas automaticamente, o que torna o cron útil para automatizar tarefas relacionadas à manutenção.

      Este guia fornece uma visão geral sobre como programar tarefas usando a sintaxe especial do cron. Ele também revisa alguns atalhos que você pode usar para tornar as agendas de trabalho mais fáceis de escrever e de entender.

      Pré-requisitos

      Para completar este guia, você precisará de acesso a um computador executando o Ubuntu 18.04. Esse equipamento pode ser seu computador local, uma máquina virtual, ou um servidor privado virtual.

      Independentemente do tipo de computador que você usar para acompanhar este guia, ele deve possuir um usuário não raiz com privilégios administrativos configurados. Para configurar isso, siga nosso guia Configuração inicial de servidor para o Ubuntu 18.04.

      Instalando o Cron

      Por padrão, quase toda distribuição do Linux tem alguma forma do cron instalada. No entanto, se estiver usando uma máquina com Ubuntu na qual o cron não estiver instalado, instale-o usando a APT.

      Antes de instalar o cron em uma máquina com Ubuntu, atualize o índice de pacotes local do computador:

      Depois, instale o cron com o seguinte comando:

      Você precisará garantir que ele também esteja configurado para executar em segundo plano:

      • sudo systemctl enable cron

      Output

      Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron

      Em seguida, o cron estará instalado no seu sistema e pronto para que você comece a agendar trabalhos.

      Entendendo como o Cron funciona

      Os trabalhos do cron são registrados e gerenciados em um arquivo especial conhecido como crontab. Cada perfil de usuário no sistema pode ter seu próprio arquivo crontab – onde o usuário poderá agendar trabalhos – que fica armazenado em /var/spool/cron/crontabs/.

      Para agendar um trabalho, simplesmente abra seu crontab para edição e adicione uma tarefa escrita na forma de uma expressão cron. A sintaxe das expressões cron pode ser desdobrada em dois elementos: o agendamento e o comando a executar.

      O comando pode ser praticamente qualquer comando que você executaria normalmente na linha de comando. O componente de agendamento da sintaxe é dividido em 5 campos diferentes, os quais vêm escritos na seguinte ordem:

      Campo Valores permitidos
      minuto 0-59
      hora 0-23
      Dia do mês 1-31
      mês 1-12 ou JAN-DEC
      Dia da semana 0-6 ou SUN-SAT

      Juntas, as tarefas agendadas em um arquivo crontab são estruturadas da seguinte forma:

      minute hour day_of_month month day_of_week command_to_run
      

      Apresentamos aqui um exemplo funcional de uma expressão cron. Essa expressão executa o comando curl para http://www.google.com, toda terça-feira, às 5:30 PM:

      30 17 * * 2 curl http://www.google.com
      

      Também existem alguns caracteres especiais que você pode incluir no componente da agenda de uma expressão cron para facilitar o agendamento:

      • *: em expressões cron, um asterisco é uma variável curinga que representa “todos”. Assim, uma tarefa agendada com * * * * * ... será executada a cada minuto, de cada hora, de cada dia, de cada mês.
      • ,: vírgulas fragmentam os valores do agendamento para formarem uma lista. Se quiser executar uma tarefa no início e na metade de cada hora, em vez de escrever duas tarefas separadas (por exemplo, 0 * * * * ... e 30 * * * * ...), poderia conseguir a mesma funcionalidade com um (0,30 * * * * ...).
      • -: um hífen representa um intervalo de valores no campo da agenda. Em vez de ter 30 tarefas agendadas separadamente em relação a um comando que você quer executar nos primeiros 30 minutos de cada hora (como em 0 * * * * ..., 1 * * * * ..., 2 * * * * ... e assim por diante), bastaria que você as agendasse como 0-29 * * * * ....
      • /: utilize uma barra com um asterisco para expressar um valor de etapa. Por exemplo, em vez de escrever oito tarefas cron separadas para executar um comando a cada três horas (como em: 0 0 * * * ..., 0 3 * * * ..., 0 6 * * * ... e assim por diante), você poderia agendá-las para executar da seguinte maneira: 0 */3 * * * ....

      Nota: você não pode expressar valores de etapa de modo arbitrário; você só pode usar números inteiros que se dividam de maneira uniforma no intervalo permitido pelo campo em questão. Por exemplo, após campo “horas” você só poderia usar uma barra com 1, 2, 3, 4, 6, 8 ou 12.

      Apresentamos a seguir, outros exemplos de como usar o componente de agendamento do cron:

      • * * * * * – Executar o comando a cada minuto.
      • 12 * * * * – Executar o comando 12 minutos após cada hora.
      • 0,15,30,45 * * * * – Executar o comando a cada 15 minutos.
      • */15 * * * * – Executar o comando a cada 15 minutos.
      • 0 4 * * * – Executar o comando todo dia às 4:00 AM.
      • 0 4 * * 2-4 – Executar o comando toda terça-feira, quarta-feira e quinta-feira às 4:00 AM.
      • 20,40 */8 * 7-12 * – Executar o comando no vigésimo e quadragésimo minuto de cada oitava hora, todos os dias dos últimos 6 meses do ano.

      Se acha isso tudo um pouco confuso ou se quiser ajuda sobre como escrever os agendamentos de suas próprias tarefas cron, o Cronitor fornece um editor de expressão da agenda do cron bastante útil, chamado “Crontab Guru”, que você pode usar para verificar se seus agendamentos do cron são válidos.

      Gerenciando os crontabs

      Assim que tiver escolhido uma agenda e souber o trabalho que deseja executar, você precisará colocá-lo em um lugar onde seu daemon consiga lê-lo.

      Como mencionado anteriormente, um crontab é um arquivo especial que mantém a agenda de trabalhos que o cron executará. No entanto, esses agendamentos não foram planejados para edição direta. Em vez disso, é recomendável que você utilize o comando crontab. Isso permite que você edite o crontab do perfil do seu usuário, sem alterar seus privilégios com o sudo. O comando crontab também revelará se há erros de sintaxe no crontab, ao passo que editá-lo diretamente não revelará.

      É possível editar seu crontab com o seguinte comando:

      Se essa for a primeira vez que executa o comando crontab no perfil desse usuário, você será solicitado a escolher um editor de texto padrão para usar ao editar seu crontab:

      Output

      no crontab for sammy - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]:

      Digite o número que corresponde ao editor de sua escolha. Como alternativa, você pode simplesmente pressionar ENTER para aceitar a opção padrão, o nano.

      Após fazer sua escolha, você será levado para um novo crontab contendo algumas instruções com comentários sobre como usá-lo:

      # Edit this file to introduce tasks to be run by cron.
      #
      # Each task to run has to be defined through a single line
      # indicating with different fields when the task will be run
      # and what command to run for the task
      #
      # To define the time you can provide concrete values for
      # minute (m), hour (h), day of month (dom), month (mon),
      # and day of week (dow) or use '*' in these fields (for 'any').#
      # Notice that tasks will be started based on the cron's system
      # daemon's notion of time and timezones.
      #
      # Output of the crontab jobs (including errors) is sent through
      # email to the user the crontab file belongs to (unless redirected).
      #
      # For example, you can run a backup of all your user accounts
      # at 5 a.m every week with:
      # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
      #
      # For more information see the manual pages of crontab(5) and cron(8)
      #
      # m h  dom mon dow   command
      

      Quando executar o crontab -e no futuro, ele irá trazer seu crontab neste editor de texto automaticamente. Assim que estiver no editor, você pode preencher sua agenda com cada trabalho em uma nova linha. Caso contrário, você pode salvar e fechar o crontab por enquanto (CTRL + X, Y, então ENTER – se tiver escolhido o editor nano).

      Nota: em sistemas Linux, há outro crontab armazenado no diretório /etc/. Trata-se de um crontab que abrange o sistema todo e que tem um campo adicional para o perfil de usuário sob o qual cada trabalho do cron deve ser executado. Este tutorial se concentra em crontabs específicos do usuário. Porém, se você quisesse editar o crontab no âmbito do sistema, poderia fazer isso com o seguinte comando:

      Se quiser visualizar o conteúdo do seu crontab, mas não editá-lo, utilize o seguinte comando:

      É possível apagar seu crontab com o seguinte comando:

      Aviso: o comando a seguir não irá pedir que você confirme se deseja apagar seu crontab. Apenas execute-o caso tenha certeza de que deseja apagá-lo.

      Esse comando excluirá o crontab do usuário imediatamente. No entanto, você pode incluir o sinalizador -i para fazer com que o comando peça para você confirmar se realmente deseja excluir o crontab do usuário:

      Output

      crontab: really delete sammy's crontab? (y/n)

      Quando solicitado, você deve digitar y para excluir o crontab ou n para cancelar a exclusão.

      Gerenciando o resultado do trabalho do cron

      Como os trabalhos do cron são executados em segundo plano, nem sempre fica aparente se eles foram executados com sucesso. Agora que sabe como usar o comando crontab e como agendar um trabalho do cron, você pode começar a experimentar maneiras diferentes de redirecionar o resultado dos trabalhos do cron para ajudar você a monitorar se eles foram executados com sucesso.

      Se tiver um agente de transferência de e-mail — como o Sendmail — instalado e configurado corretamente no seu servidor, você pode enviar o resultado das tarefas do cron para o endereço de e-mail associado ao seu perfil de usuário do Linux. Também é possível especificar manualmente um endereço de e-mail, colocando uma definição MAILTO no topo do crontab.

      Por exemplo, você poderia adicionar as linhas a seguir a um crontab. Tais linhas incluem uma instrução MAILTO, seguida de um exemplo de endereço de e-mail, uma diretiva SHELL que indica o shell a executar (bash, neste exemplo), uma diretiva HOME apontando para o caminho no qual procurar o binário do cron e uma única tarefa do cron:

      . . .
      
      MAILTO="example@digitalocean.com"
      SHELL=/bin/bash
      HOME=/
      
      * * * * * echo ‘Run this command every minute’
      

      Esse trabalho em particular retornará “Run this command every minute” (Executar este comando a cada minuto) e tal resultado será enviado por e-mail a cada minuto para o endereço especificado após a diretiva MAILTO.

      Também é possível redirecionar o resultado de uma tarefa do cron para um arquivo de registro ou para um local vazio para evitar receber um e-mail com o resultado.

      Para anexar o resultado de um comando agendado a um arquivo de registro, adicione >> ao final do comando, seguido do nome e local de um arquivo de registro de sua escolha, como no exemplo abaixo:

      * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log
      

      Vamos supor que você quer usar o cron para executar um script, mas mantê-lo em execução em segundo plano. Para fazer isso, poderia redirecionar o resultado do script para um local vazio, como /dev/null, o que excluirá prontamente quaisquer dados escritos nele. Por exemplo, o trabalho do cron a seguir executa um script PHP em segundo plano:

      * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
      

      Esse trabalho do cron também redireciona o erro padrão — representado por 2 — para o resultado padrão (>&1). Como o resultado padrão já está sendo redirecionado para /dev/null, isso permite essencialmente que o script seja executado silenciosamente. Mesmo se o crontab possuir uma instrução MAILTO, o resultado do comando não será enviado para o endereço de e-mail especificado.

      Restringindo o acesso

      É possível gerenciar quais usuários têm permissão para usar o comando crontab com os arquivos cron.allow e cron.deny, sendo que ambos ficam armazenados no diretório /etc/. Se o arquivo cron.deny existir, qualquer usuário listado nele será impedido de editar seu crontab. Se o cron.allow existir, apenas os usuários listados nele poderão editar seus crontabs. Se ambos os arquivos existirem e o mesmo usuário estiver listado em cada um deles, o arquivo cron.allow irá substituir o cron.deny e o usuário conseguirá editar seu crontab.

      Por exemplo, para negar acesso a todos os usuários e depois dar acesso ao usuário ishmael, você poderia usar a seguinte sequência de comandos:

      • sudo echo ALL >>/etc/cron.deny
      • sudo echo ishmael >>/etc/cron.allow

      Primeiro, bloqueamos todos os usuários, anexando ALL ao arquivo cron.deny. Em seguida, ao adicionar o nome de usuário ao arquivo cron.allow, damos acesso ao perfil do usuário ishmael para executar trabalhos do cron.

      Note que se um usuário tiver privilégios sudo, ele pode editar o crontab de outro usuário com o seguinte comando:

      No entanto, se o cron.deny existir e o usuário estiver listado nele, mas não estiver listado no cron.allow, você receberá o seguinte erro após executar o comando anterior:

      Output

      The user user cannot use this program (crontab)

      Por padrão, a maioria dos daemons do cron presumirão que todos os usuários têm acesso ao cron, a menos que o cron.allow ou o cron.deny exista.

      Sintaxe especial

      Também existem vários comandos abreviados que você pode usar no seu arquivo do crontab para ajudar a simplificar o agendamento de trabalhos. São essencialmente atalhos para o equivalente numérico do agendamento especificado:

      Atalho Abreviação para
      @hourly 0 * * * *
      @daily 0 0 * * *
      @weekly 0 0 * * 0
      @monthly 0 0 1 * *
      @yearly 0 0 1 1 *

      Nota: nem todos os daemons do cron podem analisar essa sintaxe (especialmente versões mais antigas); então, verifique novamente se ela funciona antes de confiar nela.

      Além disso, a abreviação @reboot irá executar qualquer comando que venha depois dela, sempre que o servidor for iniciado:

      @reboot echo "System start up"
      

      Usar esses atalhos sempre que possível pode ajudar a facilitar a interpretação do agendamento de tarefas no seu crontab.

      Conclusão

      O Cron é um utilitário flexível e eficaz, que pode reduzir a carga de trabalho de muitas tarefas associadas à administração do sistema. Quando combinado com scripts de shell, é possível automatizar tarefas que normalmente são tediosas ou complicadas. Por exemplo, você poderia escrever um script de shell para enviar backups de dados para uma solução de armazenamento de objetos e, depois, automatizá-lo com o cron.



      Source link