jhpka's blog

[Linux] systemd 서비스 등록

Admin User

🔧 유닛 파일

ini
[Unit]
Description=jh-chat API
After=network.target

[Service]
# 경로 문제 해결: nvm 설치된 Node 절대경로 사용
ExecStart=/home/jeonghun/.nvm/versions/node/v22.20.0/bin/node /home/jeonghun/jh-chat/api/server/index.js
WorkingDirectory=/home/jeonghun/jh-chat/api
Restart=always
User=jeonghun

# 로그 관리 추가 (선택사항)
StandardOutput=append:/var/log/jh-chat.log
StandardError=append:/var/log/jh-chat-error.log

[Install]
WantedBy=multi-user.target

✅ 주요 수정 사항

  1. 섹션명 정정: [Services][Service]
  2. 경로 문제 해결:
    • ~ 사용 불가 → 절대경로로 변경
    • nvm 설치된 Node 명시적 지정
  3. 대소문자 수정: Restart=AlwaysRestart=always
  4. 추가 개선사항:
    • After=network.target 추가 (네트워크 준비 후 실행)
    • 로그 파일 지정 (/var/log/ 경로 권장)
    • 작업 디렉토리 명시

⚙️ 적용 절차

bash
# 1. 유닛 파일 생성
sudo nano /etc/systemd/system/jh-chat.service

# 2. 문법 검증 (오류 없으면 출력 없음)
sudo systemd-analyze verify /etc/systemd/system/jh-chat.service

# 3. 적용 및 실행
sudo systemctl daemon-reload
sudo systemctl enable jh-chat
sudo systemctl start jh-chat

# 4. 상태 확인
sudo systemctl status jh-chat

# 5. 로그 모니터링 (실시간)
journalctl -u jh-chat -f

🔍 대체 설정 방법 (PATH 사용)

ini
[Service]
Environment="PATH=/home/jeonghun/.nvm/versions/node/v22.20.0/bin:/usr/bin:/bin"
ExecStart=node /home/jeonghun/jh-chat/api/server/index.js
...
  • 장점: Node 버전 변경 시 PATH만 수정
  • 단점: 전체 경로보다 검증이 복잡

📌 문제 해결 팁

  1. 실행 권한 확인:

    bash
    chmod +x /home/jeonghun/jh-chat/api/server/index.js
  2. 로그 확인:

    bash
    sudo journalctl -u jh-chat --since "5 min ago"
  3. 의존성 검사:

    bash
    systemd-analyze dot jh-chat.service | dot -Tsvg > deps.svg

📊 서비스 관리 명령어 요약

mermaid
graph TD
    A[서비스 등록] --> B[daemon-reload]
    B --> C[enable]
    C --> D[start]
    D --> E[status]
    E --> F{문제 있음?}
    F -->|Yes| G[journalctl 로그 확인]
    F -->|No| H[서비스 정상 실행]

최종 점검 사항:

  • 절대경로 사용 ✔️
  • systemd-analyze verify 오류 없음 ✔️
  • 서비스 상태 active (running) 확인 ✔️
댓글을 불러오는 중...