Upstart - carrega a variável bashrc

4

Eu estou querendo saber como carregar bashrc variáveis em um script upstart e executar ( node.js nesse servidor caso).

Qual é a melhor maneira de fazer isso?

Eu tentei isso:

exec sudo -u someuser $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

e isso

exec start-stop-daemon --start -c someuser --exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

Mas, na primeira opção, o aplicativo do nó não pode ler a variável http_proxy (que é definida em /etc/bash.bashrc ). No segundo, não é possível ler os arquivos de configuração (o aplicativo do nó está instalado na pasta /opt )

    
por user1760395 12.08.2014 / 11:58

3 respostas

1

Você pode forçar o bash a ler /etc/bash.bashrc e ~/.bashrc (sem os outros efeitos colaterais do uso de bash -i ) enganando-o, fazendo-o pensar em ssh :

sudo -Hu someuser env SSH_CLIENT=1 SHLVL=0 \
  "NODE_PATH=$NODE_PATH" "FULL_PATH=$FULL_PATH" \
  "FILE_NAME=$FILE_NAME" "PROGRAM_NAME=$PROGRAM_NAME" bash -c '
  "$NODE_PATH" "$FULL_PATH/$FILE_NAME" >> "/var/log/$PROGRAM_NAME.sys.log" 2>&1'

sudo geralmente redefine o ambiente, por isso você precisa passar por eles dessa maneira. Você deseja que -H (ou -i though -i cause a leitura dos arquivos de perfil) para que HOME seja definido (para a localização de ~/.bashrc , pelo menos).

    
por 12.08.2014 / 14:31
5

/etc/bash.bashrc é lido por shells interativos quando eles são iniciados. É um local para configurações de uso interativo, como configuração de conclusão, prompts, etc. Não defina variáveis de ambiente nesse local. Veja Existe um arquivo equivalente ".bashrc" lido por todos os shells? Bons locais para o sistema- as variáveis de ambiente são /etc/environment e /etc/profile (e arquivos em /etc/profile.d ).

A maneira normal de configurar as variáveis de ambiente está no próprio arquivo de trabalho. O Upstart não lê /etc/environment , mas você pode carregar variáveis de ambiente de um arquivo no script do job:

script
. /etc/environment
exec start-stop-daemon …
end script
    
por 13.08.2014 / 02:18
0

Você pode forçar o bash a ser executado como shell interativo. Tente este comando:

sudo -iu someuser /bin/bash -i -c '$NODE_PATH $FULL_PATH/$FILE_NAME \
>> /var/log/$PROGRAM_NAME.sys.log 2>&1'

Agora, antes que seu comando seja executado, ~/.bashrc e /etc/bash.bashrc são originados por bash . É o mesmo comportamento de quando você abre um terminal.

    
por 12.08.2014 / 14:16