É possível usar variáveis em crontab -e?

7

Posso dizer:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

em crontab -e ?

É possível usar variáveis em crontab -e ?

    
por user19496 03.10.2010 / 19:24

4 respostas

9

Sim, você pode definir e usar variáveis dessa maneira. Há uma limitação (que você não atingiu em seus exemplos): a string à direita do sinal = é interpretada literalmente, com os espaços iniciais removidos, portanto você não pode usar construções como FOO=$BAR/qux (por exemplo, PATH=$HOME/bin:$PATH não fará nada de útil).

Isso é declarado na documentação, que você pode ver executando

man 5 crontab

(Observe que man crontab mostra a documentação do comando crontab , na seção 1 do manual; você quer a documentação do formato de arquivo crontab , na seção 5.)

    
por 03.10.2010 / 22:41
5

Apenas fiz uma tentativa, sim, é possível. Você pode descobrir isso com este exemplo simples, coloque isso no seu crontab :

FOO=qwerty
* * * * * echo $FOO > ~/out

E verifique o arquivo ~/out (atualizado a cada minuto), ele deve conter "qwerty" .

    
por 03.10.2010 / 20:20
4

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.

    
por 01.02.2014 / 00:27
-2

Não, você não pode um cronjob só pode conter itens cron. Não é uma opção criar um bash-script e executar o bash-script através de um cronjob?

    
por 03.10.2010 / 20:18