2017-01-31 6 views
3

Моя коллега написала приложение psarge psancer под названием «Newlands», которое использует perlbrew. Я пытаюсь запустить приложение при запуске системы с помощью systemd. У меня есть этот файл службы:systemd сервис для perlbrew приложения?

[Unit] 
Description=Newlands 
After=network-online.target 

[Service] 
Type=forking 
User=newlands 
WorkingDirectory=/home/newlands/working/newlands 
PIDFile=/home/newlands/newlands.pid 
ExecStartPre=/bin/bash -c 'env > /tmp/newlands.environment' 
ExecStartPre=/bin/mkdir -p /tmp/newlands/newlands/session/ 
ExecStart=/usr/local/bin/starman --host 127.0.0.1 --listen :5000 --env production --preload-app --workers 12 --daemonize --error-log /var/log/newlands/newlands.error.log --pid /home/newlands/newlands.pid bin/newlandia.psgi 
EnvironmentFile=-/tmp/newlands.environment 
Restart=always 

[Install] 
WantedBy=multi-user.target 

Однако даже с трюком ExecStartPre (который я получил от http://tech.akom.net/archives/93-Getting-a-systemd-unit-to-read-your-.bashrc-file-for-its-environment.html, модифицированную не использовать --login вариант), ни один из perlbrew связанных переменных окружения не становятся установлены правильно. Таким образом, я получаю ошибки, указывающие на недостающие библиотеки, не найденные в @INC, когда @INC не содержит ничего на /home/newlands/.perlbrew/libs/[email protected], где фактически находятся библиотеки.

Похоже, что полученный файл в /tmp/newlands.environment по-прежнему существенно отличается от вывода «env» при фактическом входе в систему как пользователь newlands. Я хотел бы использовать source/opt/perlbrew/etc/bashrc или что-то в этом роде, но я понимаю, что это невозможно.

Любые советы? Благодаря!

+1

Re "* ни одна из переменных окружения, зависящих от perlbrew, не устанавливается правильно *," perlbrew' servers два цели, 1) оболочка для установщика perl' и 2) инструмент манипуляции PATH. Ни один из них не должен быть уместным здесь. – ikegami

+1

Re "* Таким образом, я получаю ошибки, указывающие на недостающие библиотеки, которые не найдены в @INC, когда @INC не содержит ничего в'/home/newlands/.perlbrew/libs/perl-5.20.1 @ newlands', где библиотеки на самом деле есть. * ", это не где' perlbrew'-установлен 'perl' builds install libs. Кажется, вы переопределили место установки? Если это так, вы будете использовать 'use lib ...' внутри вашего скрипта или установите' PERL5LIB' env var. (Ни одна из этих вещей не имеет ничего общего с 'perlbrew'. Фактически,' perlbrew' обычно используется, чтобы * избегать * делать это!) – ikegami

ответ

2

Решение заключается не в том, чтобы вслепую сбрасывать вашу среду CLI Bash в среду systemd, решение заключается в том, чтобы понять, какие переменные среды вам нужны и установить их.

Как @ikegami указывает, ваша проблема, вероятно, связана с переменной окружения PERL5LIB. Поэтому запустите свое приложение из CLI и выгрузите значение $ENV{PERL5LIB}, чтобы узнать, какое значение ожидает приложение, затем установите его в systemd. Возможно, вам придется повторить процесс с другими переменными.

В результате будет четко и точно определена среда systemd, которая будет стабильно и стабильно запускать ваше приложение, независимо от того, как изменяется ваш .bashrc.

 Смежные вопросы

  • Нет связанных вопросов^_^