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.output
arquivo.
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
HOME
conforme 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_PATH
manualmente:
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...