Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
107.2 Lição 2
Tópico 105: Shells e scripts do Shell
105.1 Personalizar e trabalhar no ambiente shell
  • 105.1 Lição 1
  • 105.1 Lição 2
  • 105.1 Lição 3
105.2 Editar e escrever scripts simples
  • 105.2 Lição 1
  • 105.2 Lição 2
Tópico 106: Interfaces de usuário e Desktops
106.1 Instalar e configurar o X11
  • 106.1 Lição 1
106.2 Desktops gráficos
  • 106.2 Lição 1
106.3 Acessibilidade
  • 106.3 Lição 1
Tópico 107: Tarefas administrativas
107.1 Administrar contas de usuário, grupos e arquivos de sistema relacionados
  • 107.1 Lição 1
  • 107.1 Lição 2
107.2 Automatizar e agendar tarefas administrativas de sistema
  • 107.2 Lição 1
  • 107.2 Lição 2
107.3 Localização e internacionalização
  • 107.3 Lição 1
Tópico 108: Serviços essenciais do sistema
108.1 Manutenção da data e hora do sistema
  • 108.1 Lição 1
  • 108.1 Lição 2
108.2 Log do sistema
  • 108.2 Lição 1
  • 108.2 Lição 2
108.3 Fundamentos de MTA (Mail Transfer Agent)
  • 108.3 Lição 1
108.4 Configurar impressoras e impressão
  • 108.4 Lição 1
Tópico 109: Fundamentos de Rede
109.1 Fundamentos de protocolos de internet
  • 109.1 Lição 1
  • 109.1 Lição 2
109.2 Configuração persistente de rede
  • 109.2 Lição 1
  • 109.2 Lição 2
109.3 Soluções para problemas simples de rede
  • 109.3 Lição 1
  • 109.3 Lição 2
109.4 Configurar DNS cliente
  • 109.4 Lição 1
Tópico 110: Segurança
110.1 Tarefas administrativas de segurança
  • 110.1 Lição 1
110.2 Configurar a segurança do host
  • 110.2 Lição 1
110.3 Proteção de dados com criptografia
  • 110.3 Lição 1
  • 110.3 Lição 2
How to get certified
  1. Tópico 107: Tarefas administrativas
  2. 107.2 Automatizar e agendar tarefas administrativas de sistema
  3. 107.2 Lição 2

107.2 Lição 2

Certificação:

LPIC-1

Versão:

5.0

Tópico:

107 Tarefas administrativas

Objetivo:

107.2 Automatizar e agendar tarefas administrativas do sistema

Lição:

2 de 2

Introdução

Como vimos na lição anterior, podemos agendar tarefas regulares usando o cron ou os temporizadores do systemd, mas às vezes precisamos executar uma tarefa apenas uma vez em um momento específico do futuro. Para isso, existe outro utilitário poderoso: o comando at.

Agendamento de trabalhos com at

O comando at é usado para agendamento de tarefas únicas e requer apenas que se especifique quando o trabalho deve ser executado no futuro. Após inserir at na linha de comando seguido pela especificação de tempo, você entrará no prompt de at para definir os comandos a serem executados. Saia do prompt com a seqüência de teclas Ctrl+D.

$ at now +5 minutes
warning: commands will be executed using /bin/sh
at> date
at> Ctrl+D
job 12 at Sat Sep 14 09:15:00 2019

O job at no exemplo acima simplesmente executa o comando date após cinco minutos. Como no caso do cron, a saída padrão e o erro são enviados por email. Observe que o daemon atd precisará estar rodando no sistema para ser possível usar o agendamento de tarefas at.

Note

No Linux, o comando batch é semelhante a at, porém os jobs batch são executados apenas quando a carga do sistema está baixa o suficiente para permiti-lo.

As opções mais importantes do comando at são:

-c

Imprime os comandos de um ID de trabalho específico na saída padrão.

-d

Exclui trabalhos com base em seu ID de trabalho. É um alias para atrm.

-f

Lê o job em um arquivo em vez da entrada padrão.

-l

Lista as tarefas pendentes do usuário. Se o usuário for root, todos os trabalhos de todos os usuários serão listados. É um alias para atq.

-m

Envia um email para o usuário no final do trabalho, mesmo se não houver saída.

-q

Especifica uma fila na forma de uma única letra de a a z e de A a Z (por padrão, a para at e b para batch). Os jobs nas filas com as letras mais altas são executados com um valor nice maior. Os jobs enviados a uma fila com uma letra maiúscula são tratados como trabalhos em lote (batch).

-v

Mostra a hora em que o trabalho será executado antes de ler o trabalho.

Listar jobs programados com atq

Agora vamos agendar mais dois jobs at: o primeiro executa o script foo.sh às 09:30 e o segundo executa o script bar.sh após uma hora.

$ at 09:30 AM
warning: commands will be executed using /bin/sh
at> ./foo.sh
at> Ctrl+D
job 13 at Sat Sep 14 09:30:00 2019
$ at now +2 hours
warning: commands will be executed using /bin/sh
at> ./bar.sh
at> Ctrl+D
job 14 at Sat Sep 14 11:10:00 2019

Para listar os jobs pendentes, use o comando atq, que mostra as seguintes informações para cada job: ID do trabalho, data de execução do trabalho, tempo de execução do trabalho, fila e nome de usuário.

$ atq
14      Sat Sep  14 11:10:00 2019 a frank
13      Sat Sep  14 09:30:00 2019 a frank
12      Sat Sep  14 09:15:00 2019 a frank

Lembre-se de que o comando at -l é um alias para atq.

Note

Se você executar atq como root, ele exibirá os trabalhos na fila para todos os usuários.

Excluir jobs com atrm

Se quiser excluir um job at, use o comando atrm seguido do ID do trabalho. Por exemplo, para excluir o job com ID 14, rodamos o seguinte:

$ atrm 14

É possível excluir vários trabalhos com atrm especificando diversos IDs separados por espaços. Lembre-se de que o comando at -d é um alias de atrm.

Note

O usuário que rodar atrm como root pode excluir os jobs de todos os outros usuários.

Configurando o acesso ao agendamento de trabalhos

A autorização para usuários comuns agendarem jobs at é determinada pelos arquivos /etc/at.allow e /etc/at.deny. Se /etc/at.allow existir, somente os usuários não-root listados dentro dele podem agendar jobs at. Se /etc/at.allow não existir, mas /etc/at.deny existir, somente os usuários não-root listados dentro dele não podem agendar job at (neste caso, um arquivo /etc/at.deny vazio indica que todos os usuários podem agendar jobs at). Se nenhum desses arquivos existir, o acesso dos usuários ao agendamento de jobs at depende da distribuição usada.

Especificações de tempo

Para especificar quando um job at determinado deve ser executado, use o formato HH:MM, seguido opcionalmente por AM ou PM no caso do formato de 12 horas. Se o momento especificado já tiver passado, a instrução é aplicada no dia seguinte. Para agendar uma data em particular para executar o job, é preciso adicionar as informações de data após a hora usando um dos formatos a seguir: nome-do-mês dia-do-mês, nome-do-mês dia-do-mês ano, MMDDYY, MM/DD/YY, DD.MM.YY e YYYY-MM-DD).

As palavras-chave a seguir também são aceitas: midnight (meia-noite), noon (meio-dia), teatime (16h) e now (agora), seguidas por um sinal de mais (+) e um período de tempo (minutos, horas, dias e semanas). Finalmente, você pode dizer ao at para executar o trabalho hoje ou amanhã adicionando as palavras today ou tomorrow à hora determinada. Assim, usaríamos at 07:15 AM Jan 01 para executar um trabalho às 07:15 da manhã de 1º de janeiro, e at now +5 minutes para executar um job daqui a cinco minutos. Leia o arquivo timespec na árvore /usr/share para saber mais sobre a definição exata das especificações de data e hora.

Uma alternativa ao at

Usando o systemd como gerenciador de sistema e serviços, também é possível agendar tarefas únicas com o comando systemd-run. Normalmente ele é usado para criar uma unidade transiente de temporizador para que um comando seja executado em um momento específico sem a necessidade de se criar um arquivo de serviço. Por exemplo, atuando como root, você pode executar o comando date às 11h30 em 06/10/2019 usando o seguinte:

# systemd-run --on-calendar='2019-10-06 11:30' date

Se quiser executar o script foo.sh, localizado em seu diretório atual, depois de dois minutos, use:

# systemd-run --on-active="2m" ./foo.sh

Consulte as páginas de manual para aprender todos os usos possíveis de systemd-run com systemd-run(1).

Note

Os temporizadores são registrados no diário do systemd e você pode rever os registros das diferentes unidades usando o comando journalctl. Além disso, se estiver trabalhando como um usuário comum, precisará usar a opção --user dos comandos systemctl e journalctl.

Exercícios Guiados

  1. Para cada uma das seguintes especificações de tempo, indique qual é válida e qual é inválida para at:

    at 08:30 AM next week

    at midday

    at 01-01-2020 07:30 PM

    at 21:50 01.01.20

    at now +4 days

    at 10:15 PM 31/03/2021

    at tomorrow 08:30 AM

  2. Depois de agendar um trabalho com at, como você pode rever seus comandos?

  3. Quais comandos você pode usar para rever seus jobs at pendentes? Quais comandos usaria para excluí-los?

  4. Com o systemd, qual comando é usado como alternativa a at?

Exercícios Exploratórios

  1. Crie um job at que execute o script foo.sh, localizado em seu diretório inicial, às 10h30 do próximo dia 31 de outubro. Suponha que você esteja agindo como um usuário comum.

  2. Faça login no sistema como outro usuário comum e crie outro trabalho at que execute o script bar.sh amanhã às 10:00. Suponha que o script está localizado no diretório inicial do usuário.

  3. Faça login no sistema como outro usuário comum e crie outro trabalho at que execute o script foobar.sh após 30 minutos. Suponha que o script está localizado no diretório inicial do usuário.

  4. Logado como root, execute o comando atq para listar os jobs at programados de todos os usuários. O que acontece se um usuário comum executar esse comando?

  5. Como root, exclua todos esses jobs at pendentes usando um único comando.

  6. Como root, rode o comando ls -l /usr/bin/at e examine suas permissões.

Resumo

Nesta lição, você aprendeu:

  • Usar at para rodar jobs únicos em um momento específico.

  • Gerenciar jobs at.

  • Configurar o acesso dos usuários ao agendamento de jobs at.

  • Usar o systemd-run como alternativa ao at.

Os seguintes comandos e arquivos foram discutidos nesta lição:

at

Executa comandos em um momento especificado.

atq

Lista os trabalhos at pendentes do usuário, a menos que se trate do superusuário.

atrm

Exclui trabalhos at, identificados por seu número de trabalho.

/etc/at.allow and /etc/at.deny

Arquivos particulares usados para definir restrições at.

systemd-run

Cria e inicia uma unidade timer transiente como alternativa ao at para agendamentos únicos.

Respostas aos Exercícios Guiados

  1. Para cada uma das seguintes especificações de tempo, indique qual é válida e qual é inválida para at:

    at 08:30 AM next week

    Válida

    at midday

    Inválida

    at 01-01-2020 07:30 PM

    Inválida

    at 21:50 01.01.20

    Válida

    at now +4 days

    Válida

    at 10:15 PM 31/03/2021

    Inválida

    at tomorrow 08:30 AM monotonic

    Inválida

  2. Depois de agendar um trabalho com at, como você pode rever seus comandos?

    Use o comando at -c seguido pelo ID do trabalho cujos comandos deseja rever. Observe que a saída também contém a maior parte do ambiente que estava ativo no momento em que o job foi agendado. Lembre-se de que o root pode rever as tarefas de todos os usuários.

  3. Quais comandos você pode usar para rever seus jobs at pendentes? Quais comandos usaria para excluí-los?

    Use o comando at -l para rever os jobs pendentes e o comando at -d para excluir seus jobs. at -l é um alias para atq e at -d é um alias para atrm. O root pode listar e excluir jobs de todos os usuários.

  4. Com o systemd, qual comando é usado como alternativa a at?

    O comando systemd-run pode ser usado como uma alternativa a at para agendar trabalhos únicos. Por exemplo, você pode usá-lo para executar comandos em um horário específico, definindo um temporizador de calendário ou um temporizador monotônico relativo a diferentes pontos de partida.

Respostas aos Exercícios Exploratórios

  1. Crie um job at que execute o script foo.sh, localizado em seu diretório inicial, às 10h30 do próximo dia 31 de outubro. Suponha que você esteja agindo como um usuário comum.

    $ at 10:30 AM October 31
    warning: commands will be executed using /bin/sh
    at> ./foo.sh
    at> Ctrl+D
    job 50 at Thu Oct 31 10:30:00 2019
  2. Faça login no sistema como outro usuário comum e crie outro trabalho at que execute o script bar.sh amanhã às 10:00. Suponha que o script está localizado no diretório inicial do usuário.

    $ at 10:00 AM tomorrow
    warning: commands will be executed using /bin/sh
    at> ./bar.sh
    at> Ctrl+D
    job 51 at Sun Oct 6 10:00:00 2019
  3. Faça login no sistema como outro usuário comum e crie outro trabalho at que execute o script foobar.sh após 30 minutos. Suponha que o script está localizado no diretório inicial do usuário.

    $ at now +30 minutes
    warning: commands will be executed using /bin/sh
    at> ./foobar.sh
    at> Ctrl+D
    job 52 at Sat Oct 5 10:19:00 2019
  4. Logado como root, execute o comando atq para listar os jobs at programados de todos os usuários. O que acontece se um usuário comum executar esse comando?

    # atq
    52      Sat Oct  5 10:19:00 2019 a dave
    50      Thu Oct 31 10:30:00 2019 a frank
    51      Sun Oct  6 10:00:00 2019 a emma

    Se você executar o comando atq como root, todos os jobs at pendentes de todos os usuários são listados. Se executá-lo como um usuário comum, apenas seus próprios jobs at pendentes são listados.

  5. Como root, exclua todos esses jobs at pendentes usando um único comando.

    # atrm 50 51 52
  6. Como root, rode o comando ls -l /usr/bin/at e examine suas permissões.

    # ls -l /usr/bin/at
    -rwsr-sr-x 1 daemon daemon 43762 Dec  1  2015 /usr/bin/at

    Nesta distribuição, o comando at tem definidos os bits SUID (o caractere s em vez do sinalizador executável para o proprietário) e SGID (o caractere s em vez do sinalizador executável para o grupo), o que indica que é executado com os privilégios do proprietário e do grupo do arquivo (daemon para ambos). É por isso que usuários comuns podem agendar tarefas com at.

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

107.3 Localização e internacionalização (107.3 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.