Como usar variáveis em variáveis no crontab

1

Estou tentando usar variáveis em variáveis no crontab:

AUTH=user:password
BASE_URL=http://...
COMMAND_OLDB=curl -u $AUTH $BASE_URL/openligadb >> /var/log/cron.openligadb.log

Mas acabou de receber um email em /var/mail/root :

X-Cron-Env: <BASE_URL=http://...>
X-Cron-Env: <AUTH=user:password>
X-Cron-Env: <COMMAND_OLDB=curl -u $AUTH $BASE_URL/openligadb >> /var/log/cron.openligadb.log>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <...>
Date: Mon,  9 Feb 2015 20:10:01 +0100 (CET)

Enter host password for user '$AUTH':
curl: (6) Couldn't resolve host '$BASE_URL'
curl: (6) Couldn't resolve host '>>'
curl: (3) <url> malformed

/var/log/cron.openligadb.log está vazio. $AUTH e $BASE_URL não serão resolvidos em $COMMAND_OLDB . Por que e como consertar?

    
por dtrunk 09.02.2015 / 20:16

1 resposta

2

De acordo com a página man do crontab ( man 5 crontab )

  • se você definir variáveis, elas serão variáveis de ambiente (o que é bom, desde que você não sobrescreva outras variáveis de ambiente)
  • o valor de tal variável NÃO é analisado, as substituições NÃO funcionarão

Portanto, você pode definir AUTH, BASE_URL, mas não pode definir COMMAND_OLDB, que é baseado em outras variáveis, porque elas não serão substituídas. Basta colocar o comando na linha crontab, assim (obviamente use seu intervalo de tempo)

*/10 * * * * curl -u $AUTH $BASE_URL/openligadb >> /var/log/cron.openligadb.log

mas NÃO assim

*/10 * * * $COMMAND_OLDB

    
por 09.02.2015 / 22:19

Tags