ユーザー $PATH と一致するように systemd $PATH を構成する方法

ユーザー $PATH と一致するように systemd $PATH を構成する方法

私は仮想マシンでNext.jsフロントエンドを実行するためにsystemdを使用しています。システム化されたサービスを作成するための私のワークフローは通常次のとおりです。

  1. ユーザーシェルでアプリケーションを実行するように設定する(ec2-userこの場合)
  2. 同じタスクを実行し、同じユーザーを使用するユニットファイルを作成します。

しかし$PATH

実際には拡張コードが含まれてい.bash_profileます。この構成は、次のツールによってすでに自動的に行われています。.bashrc$PATHピエンブ

$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

この問題を解決するためのよりきれいな方法はありますか?

答え1

回答プロバイダ:SOのユーザーSienna Dragon。以下に回答をコピーしました。

systemdサービスが端末を開いたときと同じ環境を持つことを望むようです。 PAM(Pluggable Authentication Module)を使用してユーザーエクスペリエンスをロードすると、これを実現できます。ファイルPAMName=loginに追加するだけです.service。このように:

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

これにより、systemdはPAMログインモジュールを使用して環境をロードします。

関連情報