웹 개발
Ubuntu systemd 서비스가 재부팅 뒤 종료된 이유를 찾은 설정 노트
수동 실행은 되지만 부팅 뒤 죽던 Node 서비스를 작업 디렉터리와 환경 파일로 고친 기록
SSH 셸과 systemd의 환경은 달랐다
수동 npm start는 성공했지만 재부팅 뒤 포트가 닫혔다. journalctl -u myapp -b에는 상대 경로 설정 파일과 DATABASE_URL을 찾지 못했다는 로그가 있었다. 셸 프로필에 있는 변수와 현재 디렉터리에 기대고 있었던 셈이다.
서비스 파일에 추측을 없앴다
[Service]
User=turin
WorkingDirectory=/srv/myapp
EnvironmentFile=/etc/myapp/myapp.env
ExecStart=/usr/bin/node /srv/myapp/server.js
Restart=on-failure
환경 파일은 root:turin, 권한 640으로 두고 daemon-reload 후 서비스를 재시작했다. 경로는 모두 절대 경로로 바꿨다.
sudo systemctl daemon-reload
sudo systemctl enable --now myapp.service
sudo systemctl is-active myapp.service
재부팅을 최종 테스트로 삼았다
restart만 통과하면 이전 셸 환경이 실수를 가릴 수 있다. 실행 사용자, 이번 부팅 로그, 실제 포트 응답을 함께 확인했다. 서비스 파일은 systemd가 알아서 추측할 정보가 아니라 실행 계약서처럼 적어야 한다.