저는 가상 머신에서 Next.js 프런트엔드를 실행하기 위해 systemd를 사용하고 있습니다. 시스템화된 서비스를 만들기 위한 내 작업 흐름은 일반적으로 다음과 같습니다.
- 사용자 셸에서 애플리케이션을 실행하도록 설정(
ec2-user
이 경우) - 동일한 작업을 수행하고 동일한 사용자를 사용하는 유닛 파일을 작성합니다.
그러나 $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 로그인 모듈을 사용하여 환경을 로드하게 됩니다.