如何配置systemd $PATH以匹配用户$PATH

问题描述 投票:0回答:1

我使用 systemd 在虚拟机上运行 Next.js 前端。我制作 systemd 服务的工作流程通常是:

  1. 使应用程序从用户 shell 运行(在本例中为
    ec2-user
  2. 编写一个执行相同操作的单元文件,并使用相同的用户

但是,由于

$PATH
的差异,该服务并未按预期运行。

确实,

.bash_profile
.bashrc
包含扩展
$PATH
的代码。此配置已通过 pyenv 等工具自动完成。

所以我最终制作了一个丑陋的单元文件来匹配我在用户 shell 中的相同

$PATH

[Unit]
Description=Web App Frontend
After=network.target

[Service]
User=ec2-user
Group=ec2-user
Environment="PATH=/home/ec2-user/.pyenv/shims:/home/ec2-user/.pyenv/bin:/home/ec2-user/.nvm/versions/node/v20.11.0/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin"
WorkingDirectory=/home/ec2-user/web-app-frontend
ExecStart=/home/ec2-user/.nvm/versions/node/v20.11.0/bin/yarn start

[Install]
WantedBy=multi-user.target

有更干净的方法来解决这个问题吗?

linux deployment virtual-machine systemd pyenv
1个回答
0
投票

您似乎希望您的 systemd 服务具有与打开终端时相同的环境。您可以使用 PAM(可插入身份验证模块)加载用户环境来实现此目的。 只需将

PAMName=login
添加到您的
.service
文件即可。像这样:

[Service]
PAMName=login
Type=simple
ExecStart=/path/to/your/command

这将启用您的 systemd 使用 PAM 登录模块加载环境。

© www.soinside.com 2019 - 2024. All rights reserved.