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...

3 Answers 3

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
2
  • Thank you for posting the answer, you've helped me in exactly the same issue. Dec 20, 2010 at 9:44
  • error: su: must be run from a terminal
    – Kuf
    Sep 1, 2017 at 7:47
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
1
  • Why do you use exec and not just put the export directly in the script block?
    – Guss
    Oct 15, 2015 at 14:58
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.

3
  • 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 2, 2010 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. Apr 2, 2010 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 5, 2010 at 13:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .