gpt4 book ai didi

perl - perlbrew 应用程序的 systemd 服务?

转载 作者:行者123 更新时间:2023-12-02 18:14:09 27 4
gpt4 key购买 nike

我的同事编写了一个名为“Newlands”的 Dancer psgi 应用程序,它使用了 perlbrew。我正在尝试使用 systemd 让应用程序在系统启动时启动。我有这个服务文件:

[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 在库实际所在的/home/newlands/.perlbrew/libs/perl-5.20.1@newlands 中不包含任何内容时,我最终会出现错误,指示在 @INC 中找不到缺少的库。

当实际以 newlands 用户身份登录时,/tmp/newlands.environment 处的输出文件似乎仍然与“env”的输出有很大不同。我想获取/opt/perlbrew/etc/bashrc 或类似的东西,但我知道这是不可能的。

有什么建议吗?谢谢!

最佳答案

解决方案不是盲目地将 Bash CLI 环境转储到 systemd 环境中,解决方案是了解您需要哪些环境变量并设置它们。

正如 @ikegami 指出的,您的问题可能与 PERL5LIB 有关。环境变量。因此,从 CLI 运行您的应用程序并转储 $ENV{PERL5LIB} 的值查看应用程序期望的值,然后在 systemd 中进行设置。您可能需要使用其他变量重复该过程。

结果将是一个清晰且精确定义的 systemd无论您的.bashrc如何,都将以稳定且一致的方式运行您的应用程序的环境被修改。

关于perl - perlbrew 应用程序的 systemd 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com