systemctl 명령어 정리 — 실무에서 자주 쓰는 예제와 팁

systemd 기반 리눅스에서 서비스·유닛을 관리하는 systemctl 명령어를 초보도 바로 써먹을 수 있게 정리했습니다. 기본 개념 → 유닛 파일 구조 → 자주 쓰는 명령어 예제 → 문제 해결 팁까지 한 번에.
- systemctl 개요
- 유닛(Unit) 종류와 기본 구조
- 자주 쓰는 명령어 모음(예제 포함)
- 트러블슈팅 & 로그 확인
- 권한·보안 관련 팁
- 요약 & 실전 팁
1. systemctl 개요
systemd의 서비스 관리 도구로, 시스템 부팅 시 데몬(서비스)을 제어하고 유닛(unit)을 관리합니다. 전통적인 init 스크립트(/etc/init.d) 대신 사용되며, 서비스 시작/중지, 부팅 시 자동 시작 설정, 상태 확인, 유닛 파일 편집 등을 수행합니다.
기본 형식: systemctl [command] [unit]
2. 유닛(Unit) 종류와 기본 구조
- .service — 서비스 단위(데몬)
- .socket — 소켓 기반 활성화
- .target — 타겟(런레벨 비슷한 개념)
- .timer — 타이머(크론 대체 가능)
- .mount / .automount / .swap / .path — 마운트·스왑·경로 관련
유닛 파일 위치:
- /etc/systemd/system/ — 시스템 관리자(운영자) 정의 유닛
- /lib/systemd/system/ 또는 /usr/lib/systemd/system/ — 패키지 제공 유닛
- ~/.config/systemd/user/ — 사용자 단위 유닛
간단한 유닛 파일 예시 (/etc/systemd/system/myapp.service)
[Unit]
Description=MyApp Service
After=network.target
[Service]
Type=simple
User=appuser
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
3. 자주 쓰는 명령어 모음 (예제)
서비스 제어
sudo systemctl start myapp.service — 서비스 시작
sudo systemctl stop myapp.service — 서비스 중지
sudo systemctl restart myapp.service — 재시작
sudo systemctl reload myapp.service — 설정 재적용(지원할 때)
sudo systemctl status myapp.service — 상태 확인 (로그 일부 포함)
부팅 시 자동 시작 설정
sudo systemctl enable myapp.service — 부팅 시 자동 시작
sudo systemctl disable myapp.service — 자동 시작 해제
sudo systemctl is-enabled myapp.service — enable 상태 확인
유닛 파일 관련
sudo systemctl daemon-reload — 유닛 파일 변경 후 데몬 재로딩
sudo systemctl edit --full myapp.service — 전체 유닛 편집(편집기 열기)
sudo systemctl cat myapp.service — 유닛 파일 내용 출력
조회/리스트
systemctl list-units --type=service — 현재 활성(loaded & active) 서비스 목록
systemctl list-unit-files --type=service — 설치된 서비스 유닛 파일 목록 (enable/disable 상태 포함)
systemctl list-timers — 활성화된 timer 목록
보호/비활성화(마스크) 및 재설정
sudo systemctl mask myapp.service — 서비스 완전 비활성(시작 금지)
sudo systemctl unmask myapp.service — mask 해제
sudo systemctl reset-failed — 실패 상태 초기화
4. 트러블슈팅 & 로그 확인
서비스가 기동되지 않거나 빠르게 죽을 때는 journalctl로 로그를 확인하세요.
sudo journalctl -u myapp.service -b — 부팅 이후 해당 유닛 로그
sudo journalctl -u myapp.service --since "2025-01-01" --until "2025-01-02" — 기간 지정
sudo journalctl -f -u myapp.service — 실시간 로그 팔로우
유닛이 바로 죽는다면:
- journalctl -u 로 stderr/stdout 메시지 확인
- 유닛 파일의
ExecStart경로·권한 확인 - 환경변수/작업 디렉토리(WorkingDirectory)가 정확한지 확인
- 의존 유닛(After=)이 제대로 실행되는지 체크
5. 권한·보안 관련 팁
- sudo 사용: 대부분 systemctl 명령은 root 권한 필요(또는 polkit 설정). 스크립트 내에서 root 없이 실행하려면 user unit( --user ) 고려.
- User 단위 유닛: 시스템 전체 권한이 필요 없는 프로세스는
systemctl --user로 관리. - 서비스 계정 최소 권한:
User=를 지정해 루트 권한을 최소화. 파일/디렉토리 권한도 일치시킬 것. - 환경 변수 유출 주의: ExecStart에 비밀번호 등 민감 값을 직접 넣지 마세요. systemd 환경파일(Directory=) 또는 외부 시크릿 매니저 사용 권장.
6. 요약 & 실전 팁
- 유닛 변경 후 반드시
sudo systemctl daemon-reload실행. - 서비스 재기동 시 먼저
status와journalctl -u로 이유를 확인 후 재시작. - 트랜잭션성 작업은 프로세스 내에서 직접 처리하고, systemd는 프로세스 죽음·재시작 제어에 집중.
- 운영 팁: 서비스는 Restart=on-failure로 재시작 정책을 주되, 무한 루프 방지용 StartLimitBurst/StartLimitIntervalSec 설정 고려.
시작/중지/재시작: start/stop/restart · 상태: status · 로그: journalctl -u
'개발 · IT > 시스템 · 인프라' 카테고리의 다른 글
| Apache vs Nginx (0) | 2025.12.24 |
|---|---|
| 💸 도메인 싸게 구매하는 법 (0) | 2025.12.16 |
| 대규모 트래픽 대비 서버 설계 __ 실전 가이드 (0) | 2025.11.28 |
| 🐳 Docker 설치 가이드 (0) | 2025.09.03 |
| Apache HTTPD 서버에서 무중단 배포 (0) | 2024.08.13 |
댓글