Saltar para o conteúdo
102 · LPIC-1 (parte 2)

107.2 Automatizar e agendar tarefas administrativas

TópicoT07ObjetivoAutomatizar e agendar tarefas administrativasPeso3PáginasLPIC-1 (102) - Version 5.0

Resumo Conciso

Cron — Tarefas periódicas

Crontab de utilizador — 6 campos

bash
min  hora  dia_mes  mes  dia_semana  comando *    *      *      *       *        /caminho/comando
OperadorSignificadoExemplo
*Qualquer valor* * * * * (a cada minuto)
,Lista de valores0,15,30,45
-Intervalo1-5 (seg a sex)
/Escalonamento*/20 (a cada 20 min)

Atalhos: @hourly, @daily, @weekly, @monthly, @yearly, @reboot

Crontab de sistema — 7 campos (campo adicional: utilizador)

bash
min  hora  dia_mes  mes  dia_semana  user  comando *    *      *      *       *       root  /caminho/comando

Localizações:

CaminhoDescrição
/etc/crontabCrontab principal do sistema
/etc/cron.d/Ficheiros crontab adicionais do sistema
/etc/cron.{hourly,daily,weekly,monthly}/Scripts executados periodicamente
/var/spool/cron/Crontabs de utilizador

Comandos crontab

ComandoFunção
crontab -eCriar/editar crontab do utilizador
crontab -lListar crontab atual
crontab -rRemover crontab
crontab -u <user>Editar crontab de outro utilizador (requer root)

Variáveis de ambiente no crontab

VariávelFunção
HOMEDirectório de trabalho do cron
MAILTODestinatário de emails de saída/erro
PATHCaminho de procura de comandos
SHELLShell utilizado (/bin/sh por omissão)

Controlo de acesso ao cron

FicheiroComportamento
/etc/cron.allow existeApenas utilizadores listados podem usar crontab
/etc/cron.deny existeUtilizadores listados não podem usar crontab (vazio = todos podem)
Nenhum dos dois existeDepende da distribuição

At — Tarefas únicas

ComandoFunção
at <tempo>Agendar comando para momento específico
atq / at -lListar jobs pendentes
atrm / at -dRemover job por ID
at -c <id>Ver comandos de um job

Especificações de tempo: HH:MM, now +5 minutes, tomorrow, today, midnight, noon, teatime (16h)

Controlo de acesso ao at

FicheiroComportamento
/etc/at.allow existeApenas utilizadores listados podem usar at
/etc/at.deny existeUtilizadores listados não podem usar at
Nenhum dos dois existeDepende da distribuição

Systemd Timers — Alternativa ao cron

Unidade .timer (exemplo: foobar.timer)

bash
[Unit]Description=Run the foobar service[Timer]OnCalendar=Mon *-*-1..7 05:30:00Persistent=true[Install]WantedBy=timers.target
Expressão OnCalendarSignificado
hourly*-*-* *:00:00
daily*-*-* 00:00:00
weeklyMon *-*-* 00:00:00
monthly*-*-01 00:00:00
yearly*-01-01 00:00:00
ComandoFunção
systemctl enable/start <timer>.timerAtivar e iniciar temporizador
systemctl list-timersListar temporizadores ativos
systemd-run --on-calendar=...Alternativa ao at (tarefa única)
systemd-run --on-active="2m"Executar após período monotónico

Exercícios Exploratórios

Exercício Exploratório 1 — Criar e listar crontab

Enunciado: Crie um crontab que execute date todas as sextas às 13h e liste o resultado.

bash
crontab -e# Adicionar: 00 13 * * 5 datecrontab -l# 00 13 * * 5 date

A saída é enviada ao utilizador por email. Consulte com mail.

Exercício Exploratório 2 — Redirecionar saída no crontab

Enunciado: Execute foobar.sh a cada minuto, redirecionando a saída para output.log e mantendo o erro para email.

bash
crontab -e# Adicionar: */1 * * * * ./foobar.sh >> output.log

O cron invoca comandos no directório inicial do utilizador, por isso ./foobar.sh funciona sem caminho absoluto.

Exercício Exploratório 3 — Desabilitar e configurar MAILTO

Enunciado: Comente o primeiro job e defina MAILTO para enviar erros apenas para emma.

bash
crontab -e# Comentar: #00 13 * * 5 date# Adicionar no topo:MAILTO="emma"*/1 * * * * ./foobar.sh

MAILTO="" (vazio) impede qualquer envio de email.

Exercício Exploratório 4 — Agendar tarefa com at

Enunciado: Agende o script foo.sh para as 10h30 do próximo dia 31 de outubro.

bash
at 10:30 AM October 31warning: commands will be executed using /bin/shat> ./foo.shat> Ctrl+Djob 50 at Thu Oct 31 10:30:00 2019

Exercício Exploratório 5 — Gerir jobs at

Enunciado: Liste todos os jobs at (como root) e remova-os todos.

bash
atq# 52      Sat Oct  5 10:19:00 2019 a dave# 50      Thu Oct 31 10:30:00 2019 a frankatrm 50 52

Como root, atq lista jobs de todos os utilizadores. atrm aceita múltiplos IDs.

Exercício Exploratório 6 — Verificar bits especiais do crontab

Enunciado: Que bit especial tem o comando crontab e qual o seu significado?

bash
ls -l /usr/bin/crontab# -rwxr-sr-x 1 root crontab 25104 ...

Tem SGID definido (o s no lugar do executável do grupo), o que significa que é executado com privilégios do grupo crontab (ver T06 para bits SUID/SGID). É por isso que utilizadores comuns podem editar o seu próprio crontab.