Schedule tasks using at and cron:
Uma necessidade recorrente num posto de SysAdmin é o facto de periodicamente ser necessário executar vários scripts que existem num sistema, sendo que seria impensável obrigar ao administrador estar a executar os mesmos manualmente. Felizmente existem utilitários como o cron
e o at
que permitem ao administrador especificar no sistema os períodos que quer que determinados scripts executem de modo a este gerir automaticamente execução dos mesmos, libertando o utilizador que tarefas rotineiras.
Num sistema RHEL existem 3 ferramentas que podem ser usadas para gerir estas tarefas automaticamente (tarefas essas que pelo sistema são conhecidas como “jobs”):
para situações em que queremos executar a mesma tarefa com regularidade, usamos o
cron
;quando pretendemos que seja executado uma tarefa em certos dias de forma assíncrona, usamos o
anacron
;caso queiramos apenas executar uma tarefa apenas uma vez em determinada altura, usamos o
at
;
Cron
O cron
é um serviço\utilitário que permite a um utilizador agendar tarefas a serem executadas em ciclos regulares. Os utilizadores especificam os cron jobs naquilo que são chamados de ficheiros com tabelas cron, estes ficheiros são depois lidos pelo crond
, o daemon responsável pela execução das tarefas.
Para usarmos o cron
temos de primeiramente o instalar caso já não esteja:
# yum -y install cronie
E de seguida temos de executar e ativar o daemon:
# systemctl enable crond.service
# systemctl start crond.service
Estando o daemon já ativo e pronto para executar tarefas, caso sejamos root, basta apenas editarmos o nosso ficheiro de tabelas cron de modo a especificarmos quando e o que é que tem de ser executado. O ficheiro em questão pode ser o /etc/crontab, contudo é mais correto a criação de um ficheiro individual dentro do diretório /etc/cron.d/. Dentro deste ficheiro devemos respeitar o seguinte sintaxe:
# .---------------- Minutos (0 - 59)
# | .------------- Horas (0 - 23)
# | | .---------- Dia do Mes (1 - 31)
# | | | .------- Mes (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- Dia da Semana (0 - 6)
# | | | | |
* * * * * [User] [Comando]
Como pode ser analisado os primeiros 5 campos são usados para referenciar quando é que o [Comando] vai ser executado, e só depois é que é especificado por quem será executado [User], e no final o comando que vai ser executado. Contudo existem algumas outras pequenas características que podem ser usadas nos primeiros 5 campos, e nada melhor para as perceber do que alguns exemplos:
Executar o [Comando] todas as horas de todos os dias, mas apenas quando sejam 30m de cada hora ( 10:30, 11:30, 12:30, etc...):
0/30 * * * * [User] [Comando]
Executar o [Comando] a cada 10 minutos:
*/10 * * * * [User] [Comando]
Executar o [Comando] todas as horas mas apenas do dia 15 de Março:
* * 15 3 * [User] [Comando]
Um site muito útil para melhor percebermos esta sintaxe e as opções que temos possíveis podemos fazer alguns testes na plataforma Crontab Guru, onde iterativamente é nos explicado cada opção de uma linha numa tabela cron.
Caso o utilizador não seja root, nem tenha privilégios sudo, este pode a mesma criar e gerir os seus cron jobs, através do utilitário crontab
. Para começar a gerir as suas tarefas o user dever usar o seguinte comando:
# crontab -e
De seguida será colocado dentro de um ficheiro de forma a poder escrever as suas tarefas respeitando o sintaxe já previamente referido. Caso o utilizador pretenda apenas visualizar as tarefas que tem ativas para serem executadas pode tomar recurso da opção “-l
”:
# crontab -l
Por ultimo, é de se referir que o root, pode especificar limitações de utilização do utilitário cron
, sendo que este pode especificar quais utilizadores é que o podem usar e quais é que não podem. Para conseguir fazer isto basta colocar o nome do utilizador que pretendemos definir, em um dos seguintes ficheiros, /etc/cron.deny (para negar a possibilidade de utilização), /etc/cron.allow (para permitir a utilização).
Anacron
O anacron
tal como o cron
, é um serviço que permite ao utilizador agendar tarefas a serem executadas, contudo este distingue-se do cron de duas formas: Se for agendada a execução de uma tarefa para uma altura em que o sistema não esteja a correr, esta tarefa é adiada para quando o sistema voltar a ser executado; Uma tarefa anacron
pode ser executada no máxima uma vez por dia.
Para começarmos a utilizar o anacron
devemos primeiramente de confirmar que o mesmo está instalado no sistema, e caso não esteja devemos instalar o mesmo:
# yum -y install cronie-anacron
E como este usa por base o mesmo daemon que o cron
devemos ativar o mesmo:
# systemctl enable crond.service
# systemctl start crond.service
Estando os requisitos garantidos podemos definir tarefas a serem executadas no ficheiro /etc/anacrontab, respeitando o seguinte sintaxe:
[Frequencia_Dias] [Delay] [Identificação_Job] [Comando]
Ou seja, uma linha de exemplo que poderia ser lá colocada seria:
3 60 cron.daily /usr/bin/script.sh
Analisando o exemplo acima vemos que esta tarefa será executada de 3 em 3 dias, com um delay de 60 minutos, usando o identificador (serve melhor identificação em logs) de “cron.daily”, correndo o executável “/usr/bin/script.sh”. Mais informações e exemplos podem ser consultados nas páginas de man.
At
Caso queiramos apenas executar uma tarefa uma única vez em determinada altura devemos recorrer ao utilitário at
. Todas as tarefas têm de ser especificadas através do comando at
, para de seguida serem executadas e corridas pelo seu daemon, o atd
.
Para usarmos este utilitário primeiramente devemos instalar o mesmo caso já não esteja:
# yum -y install at
E a seguir executar o daemon:
# systemctl enable atd.service
# systemctl start atd.service
Para definirmos uma tarefa a ser executada basta respeitarmos o seguinte sintaxe:
# at [Altura_de_Execução]
Por exemplo podemos pedir ao sistema para executar uma vez o nosso [Comando], mas apenas ás 15:00, do seguinte modo:
# at 15:00
Ou caso queiramos que seja executado dia 21 de Dezembro de 2018:
# at December 21 2018
Em ambos os exemplos após o envio do comando a consola irá reter num estado especifico á espera de introdução de comandos. Todos os comando que foram nesta fase introduzidos serão executados no período especificado, sendo que caso queiramos sinalizar o fim dos comandos a serem executados, devemos pressionar Ctrl+D
.
Para um utilizador visualizar quais os trabalhos que estão pendentes por serem executados pelo at
deve usar o seguinte comando:
# atq
Caso seja pretendido cancelar a execução de alguma tarefa pendente bastará apenas obter o seu [ID] através do comando acima, e executar o seguinte comando:
# atrm [ID]
Note-se ainda que tal como o cron
o root pode especificar quais os utilizadores é que podem ou não usar esta ferramenta através da introdução dos seus nomes nos seguintes ficheiros: /etc/at.deny e /etc/at.allow.
Mais informação e exemplos sobre tarefas geridas pelo at
, está disponível nas suas páginas man.
Last updated
Was this helpful?