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


13

Posso dizer:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

em crontab -e?

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

Respostas:


15

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 crontabmostra 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.)


7

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".


2
+1 para mostrar como o OP pode descobrir coisas semelhantes por conta própria.
Arthaey

Um exemplo melhor utilizará $ FOO dentro do script de destino.
Acumenus

4

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 -cou o shell definido SHELLnos 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/shnormalmente /bin/bash, o $( ... )comando incorporado funciona, mas não em sistemas mais antigos, onde /bin/shapenas 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+mestá escrito como date +\%Y\%macima.


-2

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?


1
É verdade em alguns outros departamentos, mas o cron do Linux suporta a atribuição de variáveis ​​de ambiente.
Gilles 'SO- stop being evil' em
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.