Não é possível acessar a variável shell na configuração do crontab

2

Eu tenho problema em acessar uma variável de shell durante a execução da tarefa cron. Na verdade eu criei uma tarefa que imprime dois valores de variáveis de shell em um arquivo env.output .

Estou escrevendo o cron job usando o comando $ crontab -e (sem usuário sudo).

Meu arquivo de configuração do crontab tem esta aparência: -

# varibales
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
     /usr/games:/usr/local/games
[email protected]
HOME=/home/ubuntu
JOBS_PATH=${HOME}/cronjobs

# Jobs
* * * * * echo "$HOME and $JOBS_PATH" >> ${HOME}/env.output 2>&1

Então, agora, quando vejo o conteúdo do arquivo env.output , recebo esta saída

/home/ubuntu and ${HOME}/cronjobs

que não é esperado, assumi.

Eu quero que minha saída seja assim: -

/home/ubuntu and /home/ubuntu/cronjobs

Sugira uma maneira de lidar com esse problema.

    
por Akshay Pratap Singh 18.11.2015 / 09:16

2 respostas

2
  

Eu tenho problema em acessar uma variável do shell

HOME como definido no topo de um crontab não é uma variável de shell, é uma variável de ambiente.

Você não pode referenciar variáveis de ambiente no topo de um crontab, já que nenhum shell as processa e, portanto, elas não são expandidas (e interpretadas literalmente).

Você terá que definir JOBS_PATH manualmente:

# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...
    
por kos 18.11.2015 / 09:34
4

Esta é uma limitação do daemon do cron. Veja isso na página de manual do crontab :

  

A cadeia de valor é não analisada para substituições ambientais ou   substituição de variáveis, assim linhas como:

     PATH = $HOME/bin:$PATH
     

não funcionará como você poderia esperar.

Você pode fazer uma solução alternativa, já que o bash trata o til ( ~ ) como substituição de $HOME . Portanto use:

JOBS_PATH=~/cronjobs
    
por chaos 18.11.2015 / 09:36