17

What is the best way to provide the environment variables defined in /etc/environment to an upstart service?

I think simply sourcing them with . in a script section does not work, because the scripts are executed by sh which would need an additional export in front of every definition...

Falcon Momot
  • 24,975
  • 13
  • 61
  • 92
Nikratio
  • 635
  • 5
  • 13

3 Answers3

16

I finally got an answer on the #upstart IRC channel. At some point, upstart will get proper PAM support and thus read /etc/environment itself. Until then, the trick is to execute the command with su. su uses PAM and will set up the proper environment. Example:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
chicks
  • 3,639
  • 10
  • 26
  • 36
Nikratio
  • 635
  • 5
  • 13
3

I tend to use eval $(cat /etc/environment | sed 's/^/export /')

It takes each line in /etc/environment, prepends export, and evaluates it:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
  • 161
  • 1
  • 5
1

Add this to your script:

. /etc/environment
export VAR1 VAR2 VAR3

where the variables you need are specified in place of the "VAR1" style placeholders.

Dennis Williamson
  • 60,515
  • 14
  • 113
  • 148
  • 2
    That way I have to manually keep the upstart configuration and /etc/environment in sync, which is (in my opinion) not any better than defining the variables twice... – Nikratio Apr 02 '10 at 16:17
  • I wouldn't use `/etc/environment` to define all your needed variables. Leave that as a static file. On my system, I could only find a few scripts that use it anyway. Create a file called something like `/etc/environment.local` and put your variables *and* exports in there and source *that* file. Then you only have to maintain that *one* file. – Dennis Williamson Apr 02 '10 at 17:03
  • /etc/environment is read by pam_env.so (and not by any scripts), so it is available for any login. Only programs started by upstart don't have access to that file by defaulht, unfortunately. – Nikratio Apr 05 '10 at 13:23