Моя коллега написала приложение 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 или что-то в этом роде, но я понимаю, что это невозможно.
Любые советы? Благодаря!
Re "* ни одна из переменных окружения, зависящих от perlbrew, не устанавливается правильно *," perlbrew' servers два цели, 1) оболочка для установщика perl' и 2) инструмент манипуляции PATH. Ни один из них не должен быть уместным здесь. – ikegami
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