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

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

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

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

然而,由于$PATH.

事实上,.bash_profile并且.bashrc包含扩展的代码$PATH。此配置已由类似工具自动完成pyenv

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

[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

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

答案1

答案由以下人士提供SO 上的用户 Sienna Dragon。我将他们的答案复制如下:

看来您希望您的 systemd 服务具有与打开终端时相同的环境。您可以使用 PAM(可插入身份验证模块)加载用户环境来实现此目的。只需添加PAMName=login到您的.service文件中即可。像这样 :

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

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

相关内容