Добавить к этому растущему списку:
Поместите env stanza в файл описания вакансии выскочки.
http://upstart.ubuntu.com/wiki/Stanzas#env
env PIDFILE=/var/run/myprocess.pid
Или что-то в этом роде. Это все в документации.
У меня была такая же проблема. Мой сценарий запуска отлично работал из командной строки, но не из сценария выскочки.
Мне просто пришлось исходить из моего . /home/username/.bashrc
в моем сценарии выскочки, чтобы заставить его работать со всеми правильными переменными среды.
script
cd /home/me
. /home/me/.bashrc
~/www/app/bin/server.production
end script
Этот вопрос, похоже, содержит множество подвопросов о том, как обрабатывать переменные среды в сценарии 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
). Ура!