Exporte variáveis de env para tarefas netas

4

Eu tenho um conjunto de scripts iniciantes, gerados pelo contramestre de um Procfile, para iniciar meu serviço da web e o trabalhador da fila de tarefas assíncronas. A maneira que o contramestre gera os scripts é a seguinte:

  • app
  • app-web
  • app-web-1
  • app-worker
  • app-worker-1

onde "app-web" e "app-worker" estão configurados para iniciar ao iniciar "app", e "app-web-1" e "app-worker-1" são configurados para iniciar ao iniciar "app-web-1" web "e" app-worker "respectivamente. Pelo que entendi, essa estrutura é permitir que você adicione facilmente mais processos web e de trabalho quando a carga aumenta, enquanto ainda gerencia a coisa toda a partir da tarefa "app" de nível superior.

Então, quero definir várias variáveis de ambiente em meus trabalhos. Claro que posso colocá-los diretamente nos scripts de nível inferior, mas seria melhor colocá-los no nível superior, para que eles tenham que ser definidos apenas uma vez. Eu pensei que seria capaz de fazer isso no app.conf simplesmente usando env e export :

env FOO=bar
export FOO

mas isso não parece funcionar: tudo bem se eu colocá-lo no meio do trabalho "app-web", mas se eu colocar no "app" de nível superior ele não é herdado pelo bottom-app nível "app-web-1". Então, minha segunda tentativa foi colocar isso no script de nível superior e, em seguida, tentar exportar novamente no meio com apenas export FOO , mas isso também não funciona.

É possível fazer o que eu quero, ou devo simplesmente me contentar com a definição das variáveis em vários lugares?

    
por Daniel Roseman 25.08.2014 / 15:19

1 resposta

4

Você pode fazer isso de duas formas: export variable no script do meio ou salvá-lo no arquivo e fornecê-lo no script mais baixo.

Eu testei este exemplo no lubuntu 12.04:

myapp.conf é o script principal e exporta a variável MYAPP_FOO :

# myapp - 
description "export environment variable"
env MYAPP_FOO=bar
export MYAPP_FOO

task
console log
script
    exec  echo "$MYAPP_FOO - myapp" 
end script

app-web.conf é o script do meio que exporta a variável do pai e define e exporta MYAPP_FOO1

# app-web - 
description "export environment variable"
start on starting myapp
env MYAPP_FOO1=bar1
export MYAPP_FOO1
export MYAPP_FOO

task
console log
script  
   exec  echo "$MYAPP_FOO - app-web - $MYAPP_FOO1" 
end script

Finalmente variável de impressão app-web1.conf :

# app-web1 - 
description "export environment variable"
start on starting app-web

task
console log
script  
   exec  echo "$MYAPP_FOO - app-web1 - $MYAPP_FOO1" 
end script

Eu usei sudo start myapp e o resultado em /var/log/upstart/app-web1.log é:

bar - app-web1 - bar1

Outra abordagem é definir sua variável no arquivo e fornecê-la onde você precisa:

# app-web1 - 
description "export environment variable"
start on starting app-web

task
console log
script  
   . /path/where/you/want/environmentFile
   exec  echo "$MYAPP_FOO - app-web1 - $MYAPP_FOO1" 
end script

Ou você pode criar environmentFile no script do meio:

# app-web - 
description "export environment variable"
start on starting myapp
env MYAPP_FOO1=bar1

task
console log
script 
   env | grep MYAPP_ > /path/where/you/want/environmentFile 
   exec  echo "$MYAPP_FOO - app-web - $MYAPP_FOO1" 
end script
    
por Lety 09.09.2014 / 00:07

Tags