Переменная среды, не взятая приложением при запуске с Выскочки (Ubuntu)

Добавить к этому растущему списку:

7
задан 17 December 2011 в 12:59
3 ответа

Поместите env stanza в файл описания вакансии выскочки.

http://upstart.ubuntu.com/wiki/Stanzas#env

env PIDFILE=/var/run/myprocess.pid

Или что-то в этом роде. Это все в документации.

2
ответ дан 2 December 2019 в 23:41

У меня была такая же проблема. Мой сценарий запуска отлично работал из командной строки, но не из сценария выскочки.

Мне просто пришлось исходить из моего . /home/username/.bashrc в моем сценарии выскочки, чтобы заставить его работать со всеми правильными переменными среды.

script

  cd /home/me
  . /home/me/.bashrc

  ~/www/app/bin/server.production
end script
1
ответ дан 2 December 2019 в 23:41

Этот вопрос, похоже, содержит множество подвопросов о том, как обрабатывать переменные среды в сценарии Upstart, поэтому я подумал, что поделюсь несколькими вещами, которые я делаю для обработки и тестирования своей среды для Upstart и Cron.

Первое, что нужно знать о Upstart и т.п., это то, что он не использует ту же среду, что и ваш активный терминал, поэтому что-то вроде:

$ export FOO=bar
$ start upstart-name

не работает, потому что upstart-name на самом деле не увидит FOO вы только что экспортировали в текущую оболочку, потому что Upstart работает в чистой среде.

Вы можете имитировать чистую среду, в которой работает Upstart (и Cron), с помощью этого удобного метода, который я скопировал из другого ответа много месяцев назад:

# 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
}

Просто сбросьте его в свой .bash_profile или тому подобное. и вы можете запускать команды, как Upstart будет их запускать:

$ cronenv
$ some/big/command --to --run --as --upstart

Теперь давайте действительно настроим общую среду на нашем компьютере, мы сделаем это, поместив переменные среды в /etc/profile.d/environ. sh

# /etc/profile.d/environ.sh
export FOO=bar

, а затем поиск его в нашем сценарии Upstart:

script
  # source our common environment file
  . /etc/profile.d/environ.sh
  exec some/big/command --to --run --as --upstart
end script

Теперь мы сможем «видеть» нашу среду в любой оболочке и любой сценарий Upstart, который является источником нашего общего файла (по умолчанию ssh в Ubuntu будет источником всего из /etc/profile.d ). Ура!

3
ответ дан 2 December 2019 в 23:41

Теги

Похожие вопросы