Contents
see List작성일 2025. 11. 30.
systemd 서비스 관리
systemd는 현대 리눅스의 표준 init 시스템으로, 서비스 시작/중지, 부팅 시 자동 실행, 로그 관리 등을 담당합니다.
언제 사용하나요?
- 서버 재부팅 후 서비스 자동 시작 설정
- Java/Node.js 애플리케이션을 데몬으로 실행
- 서비스 상태 모니터링 및 재시작 정책 설정
- 서비스 로그 확인 및 관리
기본 명령어
# 서비스 시작
sudo systemctl start nginx
# 서비스 중지
sudo systemctl stop nginx
# 서비스 재시작
sudo systemctl restart nginx
# 설정 리로드 (중단 없이)
sudo systemctl reload nginx
# 서비스 상태 확인
sudo systemctl status nginx
# 부팅 시 자동 시작 활성화
sudo systemctl enable nginx
# 부팅 시 자동 시작 비활성화
sudo systemctl disable nginx
# 활성화 + 즉시 시작
sudo systemctl enable --now nginx서비스 파일 위치
# 시스템 서비스
/usr/lib/systemd/system/
# 사용자 정의 서비스 (권장)
/etc/systemd/system/
# 사용자 서비스
~/.config/systemd/user/커스텀 서비스 만들기
# /etc/systemd/system/myapp.service
[Unit]
Description=My Java Application
After=network.target mysql.service
Wants=mysql.service
[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
# 환경 변수
Environment=JAVA_HOME=/usr/lib/jvm/java-11
Environment=SPRING_PROFILES_ACTIVE=production
EnvironmentFile=/opt/myapp/.env
[Install]
WantedBy=multi-user.target서비스 타입 설명
| Type | 설명 |
|---|---|
| simple | 기본값. ExecStart 프로세스가 메인 프로세스 |
| forking | fork하는 데몬 (PIDFile 필요) |
| oneshot | 실행 후 종료 (스크립트) |
| notify | sd_notify()로 준비 완료 알림 |
재시작 정책
Restart=no # 재시작 안 함 (기본)
Restart=on-success # 정상 종료 시에만
Restart=on-failure # 비정상 종료 시에만 (권장)
Restart=on-abnormal # 시그널로 종료 시
Restart=always # 항상 재시작
RestartSec=10 # 재시작 대기 시간 (초)
StartLimitBurst=5 # 시작 시도 횟수 제한
StartLimitIntervalSec=60 # 제한 기간서비스 등록 및 실행
# 서비스 파일 생성 후
sudo systemctl daemon-reload # 변경사항 적용
# 서비스 시작 및 활성화
sudo systemctl enable --now myapp
# 상태 확인
sudo systemctl status myapp로그 확인
# 특정 서비스 로그
journalctl -u myapp
# 실시간 로그
journalctl -u myapp -f
# 최근 100줄
journalctl -u myapp -n 100
# 오늘 로그만
journalctl -u myapp --since today
# 에러만
journalctl -u myapp -p err유용한 명령어
# 모든 서비스 목록
systemctl list-units --type=service
# 실패한 서비스
systemctl --failed
# 서비스 의존성 확인
systemctl list-dependencies nginx
# 서비스 파일 위치 확인
systemctl show -p FragmentPath nginx
# 서비스 파일 편집
sudo systemctl edit myapp --full
# 재시작 없이 환경 변수 리로드
sudo systemctl daemon-reload
sudo systemctl restart myappNode.js 서비스 예시
[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=node
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/server.js
Restart=on-failure
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target문제 해결
# 서비스 상태 상세 확인
systemctl status myapp -l
# 부팅 로그 확인
journalctl -b
# 서비스 문법 검사
systemd-analyze verify /etc/systemd/system/myapp.serviceos
| No | 작성일 | Title |
|---|---|---|
| 245 | 2015. 03. 11. | [ centos ] centos /lib/ld-linux.so.2: bad ELF interpreter: 그런 파일이나 디렉터리가 없습니다 오류 |
| 244 | 2015. 03. 10. | [ centos ] centos 7 apache 설치 및 tomcat 연동 |
| 243 | 2015. 03. 10. | [ CentOS ] centos 7 console boot |
| 226 | 2015. 03. 09. | [ centos ] centos 7 에 tomcat 서비스등록 ( systemclt ) |
| 225 | 2015. 03. 08. | [ centos ] centos 7 samba 설치하기 공유 폴더 윈도우에서 사용하기 |
| 224 | 2015. 03. 08. | [ centos ] centos 7 service 관리 ( systemctl ) |
| 223 | 2015. 03. 08. | [ centos ] centos 7 firewall ( 방화벽 ) 설정 |
| 183 | 2015. 03. 08. | [ centos ] centos 7 nfs 설정 |
| 147 | 2015. 02. 10. | [ OS ] 로드밸런싱 ( load balancing ) 과 세션 클러스트링 ( session clustering )의 개념 |
| 146 | 2015. 01. 30. | [ windows ] 윈도우 서버 원격 접속시 라이선스 문제 발생할때 |