
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.
cron
O analisador de não é tão poderoso quanto bash
o 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.