Altera globalmente o caminho para todos os usuários, mesmo no cron

6

Estamos configurando um cluster SGE com o CentOS 6. Meu sysadmin está instalando aplicativos que não são instalados via RPM (ou seja, por outros meios como make install) deve ir em um diretório não padrão, neste caso algo como% código%. O caminho para isso é atualmente adicionado à maioria das sessões (login, qlogin, etc) via /share/apps/install/bin/ , que é chamado por /share/apps/etc/environment.sh . /etc/bashrc também acrescenta algumas coisas ao PERL5LIB.

O problema que estou enfrentando é que environment.sh não é adicionado a algumas instâncias, por exemplo, coisas chamadas de um crontab.

Eu sei que posso definir manual e explicitamente /share/apps/install/bin no meu crontab pessoal ou em qualquer script ou entrada crontab, mas o que eu espero é que haja uma configuração em algum lugar fora de PATH=/bin:/usr/bin:/blah/blah:... ou /etc/profile coloque o diretório /etc/bashrc não padrão em todos os PATHs para todos os usuários.

    
por Aphoid 10.10.2013 / 20:42

3 respostas

1

O que acabamos fazendo foi uma solução multifacetada para evitar problemas de caminho. Dependendo do caso de uso, usamos um ou mais dos seguintes itens:

  • Usou caminhos absolutos para os binários instalados em locais não padrão, em vez de esperar que o binário esteja no caminho. Isso foi usado para ferramentas que têm poucas dependências externas fora do padrão e / ou trabalham isoladamente.
  • Criado e usado um script de wrapper para uma ferramenta que configura o ambiente conforme necessário; manualmente definindo o PATH=... dentro desse script e / ou executando source $HOME/.bashrc conforme apropriado. Isso foi usado para ferramentas que precisavam de outras ferramentas, mas que, de outra forma, podiam ser executadas em nosso cluster.
  • Criado um contêiner (Docker no nosso caso) incluindo os binários e uma configuração mais complexa. Isso foi usado para ferramentas que exigem um ambiente significativamente diferente de nossa configuração de cluster padrão.
por 23.03.2016 / 20:02
10

Adicione um arquivo com o valor que você deseja que o PATH tenha em /etc/profile.d . Esses arquivos são configurados para serem originados por shells como Bash, Csh Zsh ou tcsh.

Exemplo

Precisamos ter o seguinte valor adicionado ao nosso PATH.

/usr/local/share/bin

Então, criamos um arquivo, /etc/profile.d/ourstuff.sh , com a seguinte linha:

export PATH=/usr/local/share/bin:$PATH

Arquivos com a extensão .sh são originados por shells como Bash e Zsh. Arquivos com a extensão .csh são originados por Csh e tcsh.

EDIT # 1 - Acompanhamento

O OP fez a seguinte pergunta de acompanhamento.

Yes, but what about cron jobs? Is there a way to get the path even there? cron doesn't seem to call /etc/profile or /etc/bashrc.

A que eu respondi:

Correto, não é nem vai. Você precisa definir o SHELL=/bin/bash no cron para substituir o shell padrão (normalmente /bin/sh ). Além disso, você pode definir o seguinte para usuário crons, BASH_ENV="$ HOME / .bashrc", e isso para o sistema crons, BASH_ENV="/root/.bashrc" . Seria uma maneira de contornar isso.

Eu sugiro que você não faça isso. Deixe os scripts que precisam de um ambiente específico, configure-os por conta própria. Não tente resolver todos os problemas em nível global!

    
por 10.10.2013 / 20:47
3

Você pode colocar as definições das variáveis de ambiente em /etc/environment (supondo que o seu sistema carregue pam_env para todos serviços, que deve ser o padrão em todos os sistemas Linux não embarcados modernos).

Observe que você só pode colocar definições de variáveis de ambiente estáticas, na forma VARIABLE=VALUE ou VARIABLE="VALUE" , com uma definição por linha. Você não pode ter comandos shell arbitrários, você não pode se referir ao valor de outra variável escrevendo FOO=hello+$BAR (que coloca um literal $ no valor de FOO ), etc. Contanto que você se atenha a atribuições simples como PATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin , você vai ficar bem (note que você não pode usar o diretório home do usuário lá: o valor tem que ser o mesmo para todos os usuários).

    
por 11.10.2013 / 02:09