Candidatos devem ser a habilidade de utilizar o cron, anacron e o at para executar tarefas em intervalos regulares e também para executar tarefas em momentos expecificos.

  • Gerenciar tarefas no cron.
  • Configurar acesso de usuários no cron e serviços
  • Configurar o anacron

Cron

A cron é um deamon. E por conta disso as tarefas agendadas no cron só são executadas se o mesmo estiver em execução. Execurando o comando abaixo verficamos que o cron esta em execução:

ps axu | grep cron
root      1046  0.0  0.0  29012   752 ?        Ss   Dez26   0:00 /usr/sbin/cron -f
alphabr+ 12915  0.0  0.0  14228   952 pts/1    S+   14:28   0:00 grep --color=auto cron

/etc/cron.{d,daily,hourly,monthly,weekly}/

Como podemos ver no comando abaixo esses diretorios ficam localizados dentro de /etc:

alphabraga@helix /etc $ ls -ld cron*
drwxr-xr-x 2 root root 4096 Dez 17 13:11 cron.d
drwxr-xr-x 2 root root 4096 Dez 27 10:55 cron.daily
drwxr-xr-x 2 root root 4096 Nov 24  2017 cron.hourly
drwxr-xr-x 2 root root 4096 Nov 24  2017 cron.monthly
drwxr-xr-x 2 root root 4096 Ago  1 13:02 cron.weekly

Os scripts cotidos dentro dessas pastas são executados conforme descrição do diretorio. Isso acontece por conta de definições no arquivo /etc/crontab. Que pode ser observado melhor na sessão a respeito do contrab.

/etc/at.deny

/etc/at.allow

/etc/crontab

O arquivo contrab é chamado tambem de cron do sistema e só pode ser editado pelo usuário root. E nesse arquivo podemos definir na sexta coluna o nome do usuário que vai executar aquela tarefa agendada

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

m (Minute)

Nessa coluna é definido o minuto. Valores de 0 a 59.

h (Hour)

Definda a hora. Os valores vão de 0 à 23.

dom (Day of Month)

Dia do Mẽs. Os valores vão de 0 à 31.

mon (Month)

Mês. Os valores vão de 1 à 12.

dow (Day of Week)

Dia da semana. Os valores vão de 0 à 7, onde:

  • 0 e 7 = Dom
  • 1 = Seg
  • 2 = Ter
  • 3 = Qua
  • 4 = Qui
  • 5 = Sex
  • 6 = Sab

/etc/cron.allow e /etc/cron.deny

É possivel definir que usuários podem agendar tarefas, apenas fazendo o uso dos arquivos /etc/cron.allow e /etc/cron.deny.

Esses arquivos não existem por padrão, é preciso criar-los. O arquivo cron.allow tem prioridade frente ao cron.deny, ou seja, se o nome de usuário estiver nos dois arquivos o usuário tera permissão de usar o cron, caso esteja apenas no deny aí sim ele não tera acesso ao cron.Se o arquivo cron.allow estiver vazio nenhum usuario tera acesso. Lembrando que o root não esta incluido nessas regras pois o root sempre tem acesso indepentende de como os arquivos cron.allow e cron.deny estão definidos.

/var/spool/cron/

crontab

O comando contab permite a manipulação de agendamento de tarefas de usuários. O aquivo /etc/crontab são tarefas globais, tarefas de sistema. Já as tarefas manipuldas pelo comando crontab são do usuário que executa o comando.

A opção -l exibe as tarefas agendadas do usuário logado:

alphabraga@helix ~ $ crontab  -l
no crontab for alphabraga

Para adcionar, editar ou excluir tarefas do contrab basta utilizar a opção -e:

	alphabraga@helix ~ $ crontab  -e

O editor de texto é aberto para a edição do arquivo. Depois de edita-lo, você pode listar o conteudo do mesmo com a opção -l:

alphabraga@helix ~ $ crontab  -l
# 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

*/5	*	*	*	*	date >> /tmp/tempo

Caso você for o usuário root você pode ver o corntab de outros usuários do sistema. No exemplo abaixo o usuário root lista o contab do usuário alphabraga:

crontab -u alphabraga -l

Podemos ainda apagar os dados da crontab com um simples comando. Utilizando a opção -r. É possivel ainda combinar com a opção -u:

crontab -r -u alphabraga 

É possivel tambem importar a configuração do corntab direto de um arquivo

at

O comando at serve para agenar uma tarefa no sistema.

-executes commands at a specified time. (do man do at)

Exemplo de uso do comando at para agendar uma tarefa a meia noite:

atq

atrm

anacron

O cron só funciona se a maquina estiver ligada, cso você tenha um agendamento agendado a cada 1 hora essas tarefas serão perdidas se sua maquina for desligada por algumas horas.

Ao contário do cron que é um daemon, o anacron é executado quando a maquina é iniciada e de tempos em tempos. É comum usar o anacron em máquinas desktop. No anacron não existe agendamento por usuário, por conta disso temos apenas o arquivo /etc/anacrontab

/etc/anacrontab

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1       5       cron.daily      run-parts --report /etc/cron.daily
7       10      cron.weekly     run-parts --report /etc/cron.weekly
@monthly        15      cron.monthly    run-parts --report /etc/cron.monthly

Na primeira coluna temos o campo periodo indicando de quantos em quantos dias uma tarefa sera executada. Na primeira linha temos 1. Por tanto, o comando sera executado a cada dia e na ultima linha temos 7 dessa forma o comando sera executado a cada 7 dias. Não é possivel definir as horas, a menor unidade de medida é o dia. Podemos usar ainda esses formatos na primeira coluna:

  • @monthy
  • @dayly
  • @weekely

A segunda coluna é o delay. Ela define quantos minutos depois da coluna periodo ser atingida o comando vai ser exectado. A terceira coluna é apenas um identificador. Esse identificador serve para identificar a execução de sua tarefa em logs.