CRON e CRONTAB: um pouco de teoria, uso e exemplos

"Cron" ou "Cron job" são tarefas agendadas para execução automática. Veremos aqui como agendar tarefas no Linux e quais os recursos disponíveis no Linux para ajudar nesse objetivo.

[ Hits: 37.761 ]

Por: Francisco Jose Lopes em 11/08/2017 | Blog: http://bladochico.qaplaweb.com.br


O comando crontab



crontab é o programa usado para instalar, desinstalar ou listar as tabelas de agendamento que guiam o daemon do cron no 'Vixie[2] Cron'.

Cada usuário pode ter seu próprio crontab e conforme já foi dito antes, eles não devem ser editados diretamente (estes arquivos ficam armazenados em /var/spool/cron/crontabs).

Bem, como cada usuário tem sua própria crontab, os comandos em qualquer crontab serão executados com o perfil[3] do usuário que possui a crontab (proprietário).

Obs.: os usuários uucp e news geralmente terão suas crontabs próprias, eliminando a necessidade de incluir su, explicitamente, como parte de um comando cron.

Num arquivo de crontab, linhas em branco, espaços e tabulações, no início de linha, são ignorados. Linhas cujo primeiro caractere não especial é um sinal de jogo da velha (# - hash) são comentários e também serão ignoradas.

Não são permitidos comentários na mesma linha que os comandos do cron, pois serão interpretados como parte do comando. Isso se aplica também às linhas de declaração das variáveis de ambiente.

Assim, uma linha ativa em uma crontab ou será uma configuração de ambiente, ou um comando cron.

Configurações de ambiente têm o formato clássico de expressões de atribuição, e estão na forma nome = valor, sendo que, os espaços ao redor do sinal de igual (=) são opcionais, e quaisquer espaços subsequentes não iniciais (não leading space) contidos na cadeia de caracteres do valor serão parte deste valor atribuído ao nome.

A cadeia de caracteres dos valores pode estar entre aspas (ou apóstrofos) para preservar os espaços em branco iniciais (leading space) ou finais (trailing space). A cadeia de caracteres do valor não passa por qualquer analisador de substituição, portanto, linhas como PATH=$HOME/bin:$PATH não funcionarão da forma esperada.

Algumas variáveis de ambiente são configuradas automaticamente pelo daemon do cron.
  • SHELL é configurada para /bin/sh.
  • LOGNAME e HOME são definidas a partir da linha correspondente ao usuário, em /etc/passwd, proprietário do crontab.
  • PATH está definida para valer "/usr/bin:/bin".

HOME, SHELL e PATH podem ser substituídos por configurações específicas na crontab; LOGNAME é o usuário do qual o trabalho está sendo executado e não pode ser alterado. A variável LOGNAME às vezes é chamada de USER em sistemas BSD, nesses sistemas, o USER também será configurado conforme /etc/passwd.

Além de LOGNAME, HOME e SHELL, o cron verificará a variável MAILTO, caso tenha algum motivo para enviar mensagens como resultado da execução de comandos "nesta" crontab. Se MAILTO estiver definida (e não vazia), um correio será enviado ao usuário assim chamado. Se MAILTO for definida, mas vazia (MAILTO = ""), nenhuma mensagem será enviada. Caso contrário, o correio é enviado ao proprietário da crontab.

Obs.: isto implica na necessidade de manutenção constante da caixa de entrada de mail dos usuários, sob pena de lotar o espaço em disco da partição que as contenha.

Quando e se o arquivo /etc/cron.allow existir, então o usuário deve estar listado no mesmo para poder usar esse recurso. Se o arquivo /etc/cron.allow não existir, mas o arquivo /etc/cron.deny existir, então o usuário não deve estar listado no arquivo (/etc/cron.deny) para usar este recurso.

Se nenhum desses arquivos existir, dependendo dos parâmetros de configuração locais, somente o super usuário (root) poderá usar esse comando ou, por outro lado, todos os usuários poderão usar o recurso de crontab. Em muitas distribuições, especialmente, sistemas Debian padrão e derivados, todos os usuários podem usar esse comando.

A sintaxe básica do comando se apresenta de duas formas como mostrado a seguir:

(i)	crontab [ -u username ] arquivo 
(ii)	crontab [ -u username ] [ -i ] { -e | -l | -r }

Ao usar a opção -u é necessário especificar o nome de usuário cuja tabela cron (também chamada de crontab) será operada. Se esta opção não for utilizada, o comando crontab examina a "sua" crontab, ou seja, a crontab do usuário executando o comando (usuário corrente). Note que su pode confundir o crontab, se estiver executando sob su, é boa prática usar a opção -u para garantir a operação sobre a tabela cron correta.

A primeira forma deste comando (i) é usada para instalar uma nova tabela cron a partir de um arquivo especificado, ou da entrada padrão se o pseudo-nome de arquivo "-" (hífen) for indicado.

A opção -l faz com que a crontab atual seja exibido na saída padrão.

A opção -r faz com que a crontab atual seja eliminada (removida).

A opção -e é usada para editar a crontab atual usando o programa editor de texto especificado por uma das variáveis de ambiente VISUAL ou EDITOR. O editor especificado deve editar o arquivo no local (in place); qualquer editor que desvincule o arquivo e o recrie não pode ser usado. Depois de sair do editor, a crontab modificada será instalada (ativada) automaticamente.

Obs.: caso nenhuma das duas variáveis esteja definida editor padrão do sistema será empregado. Por exemplo, no Debian e derivados o link simbólico /usr/bin/editor, aponta para o editor padrão do sistema.

No sistema Debian GNU/Linux, o cron suporta o módulo pam_env e carrega o ambiente especificado por /etc/security/pam_env.conf. No entanto, a configuração PAM NÃO substitui as configurações descritas acima, nem qualquer configuração no próprio arquivo crontab. Atente, especialmente, que se você quiser um PATH diferente de "/usr/bin:/bin", você precisará configurá-lo na crontab.

Por padrão, o cron enviará o correio eletrônico usando o cabeçalho "Content-Type:" como "text/plain" com o parâmetro "charset =" definido no charmap / codeset da localização em que o crond é iniciado, ou seja, ou a localização padrão do sistema, se nenhuma variável de ambiente LC_* estiver configurada, ou a localização especificada pelas variáveis de ambiente LC_* (ver man 7 locale).

Pode-se usar diferentes codificações de caracteres para a saída do trabalho do cron enviado, configurando as variáveis CONTENT_TYPE e CONTENT_TRANSFER_ENCODING nas crontabs, para os valores corretos dos cabeçalhos de e-mail.

[2] Paul Vixie responsável pela implementação do cron na 4ª versão do BSD, adicionou um campo para a conta de usuário.

[3] Deve-se interpretar o termo perfil, neste contexto, apenas como o usuário (username e direitos básicos de acesso), pois seu ambiente de operação não é configurado como em um login.

Página anterior     Próxima página

Páginas do artigo
   1. O cron
   2. O comando crontab
   3. Formato de linha da tabela cron (ou crontab)
   4. Exemplos
   5. Pegadinhas, ou "coisas para verificar" quando em apuros
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Instalação do Gentoo GNU/Linux em um SSD NVMe (UEFI/GPT)

LTSP no Debian 8

Rede Doméstica Wireless - Compartilhamento de Conexão 3G

Instalação e Configuração do Zabbix 3 e Agentes (Linux/Windows)

Aplicações Windows em ambiente Linux com SeamlessRDP

  
Comentários
[1] Comentário enviado por demoncyber em 24/08/2017 - 10:33h

Olá,

Parabéns pelo texto, bem redigido e completo sobre o tema, digo isto com referência de caso por ter lido vários livros sobre GNU/Linux, e a questão das muitas referências só elucidam a qualidade do trabalho. Passei o texto para alguns colegas que estão iniciando e não conhecem com profundidade no assunto.

Espero que venham novos bons textos.

Abraços

[2] Comentário enviado por cleysinhonv em 05/09/2017 - 10:53h

Um artigo bem escrito e muito útil. Tive muito sucesso usando cron em sistemas de data warehouse. Uma ferramenta simples e poderosa.

[3] Comentário enviado por QAPLA em 22/09/2017 - 11:21h


[1] Comentário enviado por demoncyber em 24/08/2017 - 10:33h

Olá,

Parabéns pelo texto, bem redigido e completo sobre o tema, digo isto com referência de caso por ter lido vários livros sobre GNU/Linux, e a questão das muitas referências só elucidam a qualidade do trabalho. Passei o texto para alguns colegas que estão iniciando e não conhecem com profundidade no assunto.

Espero que venham novos bons textos.

Abraços


Obrigado pelas palavras, são grande incentivo para continuar e saber a direção para caminhar. Espero conseguir contribuir muito mais em breve.

Forte abraço

[4] Comentário enviado por QAPLA em 22/09/2017 - 11:25h


[2] Comentário enviado por cleysinhonv em 05/09/2017 - 10:53h

Um artigo bem escrito e muito útil. Tive muito sucesso usando cron em sistemas de data warehouse. Uma ferramenta simples e poderosa.


Obrigado, realmente CRON vem sendo o esteio de nossa produção em escala na empresa.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts