crontab não possui as mesmas variáveis de ambiente que a execução do usuário

12

Eu executei meu trabalho 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, experimentando um comportamento de tempo de execução diferente dos meus scripts.

Um conserto 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 env está faltando mesmo que seja do mesmo usuário 'root'? (Eu modifico o crontab rodando 'crontab -e' da raiz)

    
por Bamboo 05.12.2011 / 07:06

3 respostas

21

O Cron sempre é executado com um ambiente quase vazio. HOME, LOGNAME e SHELL estão definidos; e um PATH muito limitado. Portanto, é aconselhável usar caminhos completos para executáveis e exportar quaisquer variáveis necessárias em seu script ao usar o cron.

Existem várias abordagens que você pode usar para definir suas variáveis de ambiente no cron, mas todas elas são configuradas no seu script.

Abordagem 1:

Defina cada variável que você precisa manualmente no seu script.

Abordagem 2:

Fonte do seu perfil:

. $HOME/.bash_profile (ou . $HOME/.profile )

(Você geralmente descobrirá que o arquivo acima irá fornecer outros arquivos (por exemplo, ~ / .bashrc - > / etc / bashrc - > /etc/profile.d/*) - se não, você pode pesquisar aqueles também.)

Abordagem 3:

Salve suas variáveis de ambiente em um arquivo (execute como o usuário desejado):

env > /path/to/my_env.sh

Em seguida, importe através do seu script cron:

env - 'cat /path/to/my_env.sh' /bin/sh

Abordagem 4:

Em alguns casos, você pode definir variáveis globais do cron em /etc/default/cron . Há um elemento de risco para isso, no entanto, como estes serão definidos para todos os trabalhos agendados.

    
por 05.12.2011 / 23:05
1

O Cron cria seu shell OWN com o uso especificado pelo qual ele será executado.

Portanto, se você quiser manter a mesma variável do seu usuário, tente executá-la com seu próprio usuário, em vez do usuário raiz ou qualquer outro usuário.

Ou

A melhor maneira é exportar essas variáveis em seu próprio script.

    
por 05.12.2011 / 08:45
1

No RedHat CentOS, você pode definir o PATH padrão do /etc/rc.d/init.d/functions como permanentemente configurado. /etc/rc.d/crond chama funções quando inicia.

    
por 07.04.2014 / 22:19