Embora os crontabs do Linux suportem a definição de algumas variáveis que contêm valores literais, não é muito útil, além de condensar texto longo em uma representação mais curta ou controlar algumas coisas sobre o próprio cron, como onde enviar a saída de e-mail.
A flexibilidade é entender que a parte do comando da entrada do cron será passada para /bin/sh -c
ou o shell definido com SHELL
em sistemas usando o Vixie cron (aquele normalmente instalado em sistemas Linux). O que isto significa é que o restante da linha de comando é um script de shell simples. NOTA: perceba qual shell está sendo usado. No Linux /bin/sh
é normalmente /bin/bash
, então o comando $( ... )
embedded funciona, mas não em sistemas mais antigos, onde /bin/sh
apenas entende '
.
Por exemplo, eu tenho uma linha crontab simples que arquiva mensalmente um arquivo MBX de mensagens salvas e as compacta. Parece assim:
15 0 1 * * nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf
Isso será executado no primeiro dia de cada mês às 12h15, definir um novo nome de arquivo com o CCYYMM, mover o arquivo atual para o novo nome e compactá-lo. A coisa a lembrar é que um %
(sinal de porcentagem) sem escape será tratado como uma nova linha e os dados seguintes serão enviados como stdin para o comando que precede o sinal de porcentagem. É por isso que o% normaldate +Y+m
é escrito como date +\%Y\%m
acima.