1. 서비스 파일 위치와 유형
systemd 서비스 파일은 시스템 단위(System-level) 와 사용자 단위(User-level) 로 나뉩니다.
두 서비스의 가장 큰 차이는 “어떤 systemd 인스턴스가 관리하느냐” 입니다.
| 유형 | 경로 | 실행 주체(systemd 인스턴스) | 역할 | 우선순위 | 적용 대상 |
|---|
| 🧩 시스템 단위 (System) | /usr/lib/systemd/system/ | systemd (PID 1) | 패키지나 운영체제가 제공하는 기본 시스템 서비스 | 낮음 | 시스템 전체 |
| | /etc/systemd/system/ | systemd (PID 1) | 시스템 관리자가 직접 정의하거나 오버라이드한 서비스 | 높음 | 시스템 전체 |
| 👤 사용자 단위 (User) | /usr/lib/systemd/user/ | 각 사용자 세션의 systemd --user | 패키지에서 제공하는 기본 사용자 서비스 | 낮음 | 모든 사용자 |
| | /etc/systemd/user/ | 각 사용자 세션의 systemd --user | root가 정의하지만 root가 실행하지 않음 — 모든 사용자의 user-level systemd에 적용 | 중간 | 모든 사용자 |
| | ~/.config/systemd/user/ | 해당 사용자 자신의 systemd --user | 개인이 직접 작성한 서비스 | 높음 | 해당 사용자만 |
✅ 동일한 서비스 이름일 경우, 우선순위는 다음과 같습니다:
사용자 서비스: ~/.config/systemd/user/ → /etc/systemd/user/ → /usr/lib/systemd/user/
시스템 서비스: /etc/systemd/system/ → /usr/lib/systemd/system/
💡 차이 요약
| 구분 | 실행 인스턴스 | 제어 명령 예시 | 권한 | 설명 |
|---|
| 시스템 단위 서비스 | systemd (PID 1) | sudo systemctl start nginx | root 필요 | 시스템 전체 서비스 (nginx, sshd 등) |
| 전역 사용자 서비스 | 각 사용자의 systemd --user | systemctl --user start myservice | 일반 사용자 | root가 설치했지만, 각 사용자 세션에서 실행됨 |
| 개인 사용자 서비스 | 자신의 systemd --user | systemctl --user start myapp | 일반 사용자 | 개인이 만든 백그라운드 서비스 |
2. 서비스 파일 기본 구조
1
2
3
4
5
6
7
8
9
10
11
| [Unit]
Description=Service Description # 서비스 설명
After=network.target # 네트워크가 활성화된 후에 시작
[Service]
ExecStart=/home/{username}/{path_to_script} # 실행할 스크립트 경로
User={username} # 실행 사용자
Group={groupname} # 실행 그룹
[Install]
WantedBy=multi-user.target # 시스템 부팅 시 실행
|
3. 커스텀 서비스 예시
1
2
3
4
5
6
7
8
9
10
11
12
| [Unit]
Description=Register Service [servicename]
[Service]
User=root
Group=root
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/node/bin"
WorkingDirectory=/home/test
ExecStart=/home/test/start.sh
[Install]
WantedBy=multi-user.target
|
/usr/lib/systemd/system OS 벤더사가 관리하며 배포 패키지에서 제공되는 서비스 파일 위치./etc/systemd/system 시스템 관리자가 관리하는 영역으로, 벤더 제공 유닛을 오버라이드할 때 사용.~/.config/systemd/user/ 일반 사용자가 직접 작성하여 개인 단위로 실행하는 서비스 파일 위치.
4. systemctl 명령어
| 명령어 | 설명 |
|---|
systemctl enable [servicename] | 부팅 시 서비스 자동 시작 등록 |
systemctl start [servicename] | 서비스 시작 |
systemctl status [servicename] | 서비스 상태 확인 |
systemctl stop [servicename] | 서비스 종료 |
systemctl disable [servicename] | 부팅 시 자동 시작 해제 |
systemctl daemon-reload | 서비스 파일 변경 시 systemd 데몬 재로드 |
systemctl reset-failed | 실패한 서비스 상태 초기화 |
💡 사용자 서비스의 경우 --user 옵션을 붙여야 합니다. 예: systemctl --user start myapp.service
5. 서비스 삭제 절차
단계별
1
2
3
4
5
6
| systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename] # 관련 심볼릭 링크 포함
rm /usr/lib/systemd/system/[servicename] # 관련 심볼릭 링크 포함
systemctl daemon-reload
systemctl reset-failed
|
한 줄 명령어
1
2
3
4
5
6
7
| service=YOUR_SERVICE_NAME; \
systemctl stop $service && \
systemctl disable $service && \
rm /etc/systemd/system/$service && \
rm /usr/lib/systemd/system/$service && \
systemctl daemon-reload && \
systemctl reset-failed
|
6. 사용자(User) 서비스 유지 (loginctl linger)
기본적으로 systemd --user 인스턴스는 로그인 세션이 종료되면 같이 종료됩니다. 만약 로그아웃 후에도 서비스를 계속 유지하고 싶다면 다음 명령을 실행합니다:
1
| loginctl enable-linger {username}
|
이 명령은 해당 사용자의 세션이 끊겨도 systemd --user 인스턴스가 계속 살아있게 해주며, 이를 통해 백그라운드 서비스처럼 동작할 수 있습니다.