É possível exportar a variável env através do Upstart?

6

Eu preciso exportar uma variável FOO=stringhere para que os processos do sistema possam usá-la. E o lugar que eu gostaria de fazer isso é o trabalho de Upstart.

Infelizmente, tentei usar o manual do Upstart para fazer env FOO=stringhere link

Mas depois que o sistema é inicializado, echo $FOO não retorna nada.

Estou tentando fazer algo impossível, ou há alguma coisa que eu deva saber?

    
por Coder 15.09.2011 / 16:27

3 respostas

6

Como diz a página que você se refere,

Upstart allows you to set environment variables which will be accessible to the jobs whose job configuration files they are defined in.

O indica que as variáveis são definidas no ambiente usado pelos daemons do sistema na inicialização. O ambiente usuário é configurado separadamente uma vez que você efetua login.

Se você quiser verificar se o daemon sabe sobre a variável que você definiu, você pode testar isso temporariamente modificando seu script de inicialização e adicionando algo como logger "=============== The variable FOO is set to $FOO =====================" . Você deve então ver as informações registradas durante a inicialização (procure em /var/log/messages , por exemplo).

    
por 15.09.2011 / 16:35
3

No seu exemplo, essa variável pode ser usada no mesmo arquivo.

Anote o livro de receitas.

Note that a Job Configuration File does not have access to a user's environment variables, not even the superuser. This is not possible since all job processes created are children of init which does not have a user's environment.

Mais explicações do livro de receitas da novidade.

Digamos que você escreva env TESTING=123 no seu arquivo * .conf, então você pode usar essa variável no seu bloco de script abaixo (aquele que você usou)

script
  # prints "TESTING='123'" to system log
  logger -t $0 "TESTING='$TESTING'"
end script

Ou uma abordagem um pouco mais sofisticada permitiria que você usasse variáveis em tarefas que "ouçam" seu trabalho:

# /etc/init/A.conf
start on wibble
export foo

# /etc/init/B.conf
start on A
script
  logger "value of foo is '$foo'"
end script
    
por 03.11.2012 / 15:08
2

O que você deseja realizar é mais adequado para /etc/profile , que é source 'ed por shell de login.

export foo="String here"

    
por 16.08.2013 / 23:04