Executei meu trabalho do crontab 0 2 */1 * * /aScript >aLog.log 2>&1
como um usuário 'root' e, no entanto, achei que o env é diferente do env do usuário 'root' e, portanto, estou enfrentando um comportamento de tempo de execução diferente dos meus scripts.
Uma tentativa de correção foi colocar comandos de exportação em arquivos rc.d, mas ainda não apareceu! Acabo colocando comandos de exportação no próprio aScript .
Minha pergunta é que existe uma maneira melhor de abordar esse problema? e por que o env está ausente mesmo que seja do mesmo usuário 'root'? (Eu modifico o crontab executando 'crontab -e' a partir da raiz)
linux
cron
environment-variables
Bambu
fonte
fonte
source
seu perfil (bash).Respostas:
Cron sempre roda com um ambiente quase vazio. HOME, LOGNAME e SHELL estão definidos; e um caminho muito limitado. Portanto, é aconselhável usar caminhos completos para executáveis e exportar todas as variáveis necessárias em seu script ao usar cron.
Existem várias abordagens que você pode usar para definir suas variáveis de ambiente no cron, mas todas elas definem isso em seu script.
Abordagem 1:
Defina cada variável que você precisa manualmente em seu script.
Abordagem 2:
Crie seu perfil:
. $HOME/.bash_profile
(ou. $HOME/.profile
)(Você geralmente descobrirá que o arquivo acima irá originar outros arquivos (por exemplo, ~ / .bashrc -> / etc / bashrc -> /etc/profile.d/*) - caso contrário, você também poderá obtê-los.)
Abordagem 3:
Salve suas variáveis de ambiente em um arquivo (execute como o usuário desejado):
Em seguida, importe via seu script cron:
Abordagem 4:
Em alguns casos, você pode definir variáveis cron globais em
/etc/default/cron
. No entanto, há um elemento de risco, pois eles serão definidos para todos os trabalhos cron.fonte
bash: SHELL=/bin/bash: No such file
Cron cria seu próprio shell com o uso especificado através do qual será executado.
Portanto, se você deseja manter a mesma variável do seu usuário, tente executá-la com seu próprio usuário, em vez de raiz ou qualquer outro usuário.
Ou
A melhor maneira é exportar essas variáveis em seu próprio script.
fonte
No RedHat CentOS, você pode definir /etc/rc.d/init.d/functions o caminho padrão para definir permanentemente. /etc/rc.d/crond chama funções quando é iniciado.
fonte
Eu tive um problema semelhante na minha AWS. Descobri assim
me deu a
/usr/bin/local/python3
localizaçãoe depois
fonte