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

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

Tenho problemas ao acessar uma variável de shell durante a execução do cron job. Na verdade, criei um trabalho que imprime dois valores de variáveis ​​​​de shell em um env.outputarquivo.

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

Meu arquivo de configuração do crontab é assim: –

# 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 de file env.output, recebo esta saída

/home/ubuntu and ${HOME}/cronjobs

o que não é esperado, presumi.

Quero que minha saída fique assim: -

/home/ubuntu and /home/ubuntu/cronjobs

Sugira-me alguma maneira de lidar com esse problema.

Responder1

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

A sequência de valores énãoanalisado para substituições ambientais ou substituição de variáveis, portanto 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 uma substituição de$HOME . Portanto use:

JOBS_PATH=~/cronjobs

Responder2

Estou com problemas para acessar uma variável shell

HOMEconforme definido na parte superior de um crontab, não é uma variável de shell, é uma variável de ambiente.

Você não pode fazer referência a variáveis ​​de ambiente no topo de um crontab, pois nenhum shell as processa e, portanto, elas não são expandidas (e interpretadas literalmente).

Você terá que definir JOBS_PATHmanualmente:

# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...

informação relacionada