사용자 $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 로그인 모듈을 사용하여 환경을 로드하게 됩니다.

관련 정보