Respostas:
Sim, você pode definir e usar variáveis dessa maneira. Há uma limitação (que você não encontrou nos seus exemplos): a string à direita do =
sinal é interpretada literalmente, com espaços à esquerda removidos, para que você não possa usar construções como FOO=$BAR/qux
(por exemplo PATH=$HOME/bin:$PATH
, não fará nada útil).
Isso é afirmado na documentação, que você pode ver executando
man 5 crontab
(Observe que man crontab
mostra a documentação do crontab
comando , na seção 1 do manual; você deseja a documentação do crontab
formato do arquivo , na seção 5.)
Apenas tentei, sim, é possível. Você pode descobrir isso com este exemplo simples, coloque isso em seu crontab
:
FOO = qwerty * * * * * eco $ FOO> ~ / out
E verifique o arquivo ~/out
(atualizado a cada minuto), que deve conter "qwerty"
.
Embora os crontabs do Linux suportem a definição de algumas variáveis que mantê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 cron em si, como para onde enviar a saída de email.
A flexibilidade é entender que a parte do comando da entrada cron será passada para /bin/sh -c
ou o shell definido SHELL
nos sistemas usando o Vixie cron (aquele geralmente instalado nos sistemas Linux). O que isso significa é que o restante da linha de comando é um simples script de shell. NOTA: saiba qual shell está sendo usado. No Linux, /bin/sh
normalmente /bin/bash
, o $( ... )
comando incorporado funciona, mas não em sistemas mais antigos, onde /bin/sh
apenas se entende `
.
Por exemplo, eu tenho uma linha simples do crontab que arquiva um arquivo MBX de mensagens salvas mensalmente e o compacta. Se parece com isso:
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, defina um novo nome de arquivo com CCYYMM, mova o arquivo atual para o novo nome e o comprima. Lembre-se de que um escape %
(sinal de porcentagem) sem escape será tratado como uma nova linha e os dados a seguir serão enviados como stdin para o comando que precede o sinal de porcentagem. É por isso que o normal date +Y+m
está escrito como date +\%Y\%m
acima.
Não, você não pode um cronjob pode conter apenas itens cron. Não é uma opção criar um script bash e executá-lo por meio de um cronjob?