Diese Frage scheint viele Unterfragen zum Umgang mit Umgebungsvariablen in einem Upstart-Skript zu enthalten. Daher dachte ich, ich würde ein paar Dinge teilen, die ich tue, um meine Umgebung für Upstart und Cron zu handhaben und zu testen.
Das Erste, was Sie über Upstart und dergleichen wissen sollten, ist, dass es nicht dieselbe Umgebung wie Ihr aktives Terminal hat. So etwas wie:
$ export FOO=bar
$ start upstart-name
funktioniert nicht, da upstart-name
das FOO
gerade in die aktuelle Shell exportierte nicht angezeigt wird, da Upstart in einer sauberen Umgebung ausgeführt wird.
Sie können die saubere Umgebung, in der Upstart (und Cron) ausgeführt werden, mit dieser praktischen Methode nachahmen, die ich vor vielen Monden aus einer anderen Antwort herausgeschnitten habe:
# 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
}
Geben Sie das einfach in Ihr .bash_profile
oder ähnliches ein und Sie können Befehle so ausführen, wie Upstart sie ausführen würde:
$ cronenv
$ some/big/command --to --run --as --upstart
Lassen Sie uns nun tatsächlich eine gemeinsam genutzte Umgebung auf unserer Box einrichten. Dazu fügen wir unsere Umgebungsvariablen ein /etc/profile.d/environ.sh
# /etc/profile.d/environ.sh
export FOO=bar
und dann das in unserem Upstart-Skript beschaffen:
script
# source our common environment file
. /etc/profile.d/environ.sh
exec some/big/command --to --run --as --upstart
end script
Jetzt können wir unsere Umgebung auf jeder Shell und jedem Upstart-Skript "sehen", aus dem unsere gemeinsame Datei stammt (standardmäßig bezieht ssh unter Ubuntu alles von /etc/profile.d
). Yay!