Esta questão parece conter muitas sub-questões sobre como lidar com variáveis de ambiente em um script Upstart, então eu pensei em compartilhar algumas coisas que eu faço para lidar e testar meu ambiente para Upstart e Cron.
A primeira coisa a saber sobre o Upstart, e assim por diante, é que ele não compartilha o mesmo ambiente que o seu terminal ativo, então algo como:
$ export FOO=bar
$ start upstart-name
não funciona porque upstart-name
não verá realmente o FOO
que você acabou de exportar para o shell atual porque o Upstart é executado em um ambiente limpo.
Você pode imitar o ambiente limpo em que o Upstart (e o Cron) é executado com esse método prático que eu copiei de outra resposta há muitas luas:
# makes the current shell have an environment like cron or upstart
# http://stackoverflow.com/a/2546509/5006
function cronenv() {
cron_env+="HOME=$HOME\n"
cron_env+="LOGNAME=$LOGNAME\n"
cron_env+="PATH=/usr/bin:/bin\n"
cron_env+="SHELL=/bin/sh\n"
cron_env+="PWD=$PWD\n"
if [[ -n $LC_ALL ]]; then
cron_env+="LC_ALL=$LC_ALL\n"
fi
env - 'echo -e $cron_env' /bin/sh
}
Apenas descarte isso em seu .bash_profile
ou algo parecido e você poderá executar comandos quando o Upstart os executar:
$ cronenv
$ some/big/command --to --run --as --upstart
Agora, vamos configurar um ambiente compartilhado em nossa caixa, faremos isso colocando nossas variáveis de ambiente em /etc/profile.d/environ.sh
# /etc/profile.d/environ.sh
export FOO=bar
e, em seguida, obtendo isso em nosso script Upstart:
script
# source our common environment file
. /etc/profile.d/environ.sh
exec some/big/command --to --run --as --upstart
end script
Agora poderemos "ver" nosso ambiente em qualquer shell e qualquer script Upstart que origine nosso arquivo comum (por padrão, o ssh no Ubuntu irá fornecer tudo de /etc/profile.d
). Yay!