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.