Use variáveis ​​em caminhos no crontab

Use variáveis ​​em caminhos no crontab

O crontab que uso é mais complexo, mas dividi o problema em um conjunto mínimo de problemas.

Meu crontab está funcionando assim:

mypath='/home/user/opt/script_home'
myscript='/home/user/opt/script_home/myscript.py'
* * * * * "$myscript"

Mas não assim:

mypath='/home/user/opt/script_home'
myscript="${mypath}/myscript.py"
* * * * * "$myscript"

Mensagem de erro no maildir:

/bin/sh: ${mypath}/myscript.py: No such file or directory

O interpretador python está disponível no cron restrito $PATH, então esse não é o problema.

Editar: Além disso, se eu executar o crontab usando bash ou sh, ele será executado sem erros. (Depois de remover * * * * * é claro)

Pode ser que esteja faltando algo muito básico aqui, mas já faz algum tempo que estou pensando nisso e pesquisei na web. Mas não tive sorte com meus parâmetros de pesquisa até agora. O crontab está trabalhando com o uso feio do caminho comum em diversas posições, mas isso não é um bom código e, portanto, me incomoda. Por favor, me ajude a sair da minha agonia =)

Responder1

DR: você não pode.

de acordo comman 5 crontab

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

PATH = $HOME/bin:$PATH

não funcionará como você poderia esperar.

cronO analisador de não é tão poderoso quanto basho de.

Responder2

Você pode configurar mypath esta variável no arquivo .bash_profile ou .bashrc para que ela fique acessível.

vi .bash_profile or vi .bashrc 

em seguida, adicione o caminho abaixo e salve

 mypath='/home/user/opt/script_home'

Responder3

Como o cron não é um shell interativo nem de login, nem .bashrc nem .bash_profile são originados. Portanto, se você definir mypath nesses arquivos, não terá essa variável ao usar o cron. Até onde sei, a única maneira de tê-lo no cron é defini-lo diretamente (ou seja, sem substituições ambientais ou substituição de variáveis, como dito antes) no script crontab.

informação relacionada