systemd로 서비스 자동 시작/중지/재시작 설정 가이드
Linux 시스템에서 systemd를 사용하여 서비스의 자동 시작, 중지, 재시작을 설정하는 방법을 안내합니다. 부팅 시 자동으로 실행되는 서비스를 관리하고자 할 때 유용합니다.
systemd란 무엇인가?
systemd는 Linux 시스템에서 사용되는 시스템 및 서비스 관리자입니다. 시스템 부팅 과정을 관리하고, 서비스(데몬)의 시작, 중지, 재시작, 상태 확인 등을 담당합니다. 기존의 SysVinit이나 Upstart를 대체하며 현대 Linux 배포판에서 표준으로 사용되고 있습니다.
systemd를 언제, 왜 사용하는가?
- 자동 시작: 시스템 부팅 시 특정 서비스가 자동으로 실행되도록 설정할 때 사용합니다.
- 서비스 관리: 실행 중인 서비스의 상태를 확인하고, 필요에 따라 수동으로 시작, 중지, 재시작할 때 사용합니다.
- 의존성 관리: 여러 서비스 간의 실행 순서나 의존성을 정의하여 안정적인 서비스 운영을 보장할 때 사용합니다.
- 리소스 관리: 각 서비스가 사용할 수 있는 CPU, 메모리 등의 리소스를 제한하고 관리할 때 사용합니다.
systemd 서비스 파일(.service) 이해하기
systemd는 .service 확장자를 가진 유닛 파일을 사용하여 서비스의 동작을 정의합니다. 이 파일들은 주로 /etc/systemd/system/ 디렉토리에 위치합니다. 주요 섹션은 다음과 같습니다:
- [Unit]: 서비스에 대한 메타데이터를 정의합니다.
Description,After(선행 서비스),Wants(선택적 의존성) 등의 지시어를 포함합니다. - [Service]: 서비스 자체의 동작을 정의합니다.
Type(서비스 실행 방식),ExecStart(시작 명령어),ExecStop(중지 명령어),Restart(재시작 정책) 등의 지시어를 포함합니다. - [Install]: 서비스의 설치 및 활성화 관련 정보를 정의합니다.
WantedBy(어떤 타겟에서 이 서비스를 필요로 하는지) 지시어를 포함합니다. 주로multi-user.target이 사용됩니다.
systemd 서비스 관리 기본 명령어
systemd 서비스를 관리하기 위해 systemctl 명령어를 사용합니다. 다음은 가장 기본적인 명령어들입니다.
1. 서비스 상태 확인:
systemctl status <서비스명>.service
2. 서비스 시작:
sudo systemctl start <서비스명>.service
3. 서비스 중지:
sudo systemctl stop <서비스명>.service
4. 서비스 재시작:
sudo systemctl restart <서비스명>.service
5. 서비스 다시 로드 (설정 변경 후):
sudo systemctl daemon-reload
6. 서비스 활성화 (부팅 시 자동 시작):
sudo systemctl enable <서비스명>.service
7. 서비스 비활성화 (부팅 시 자동 시작 방지):
sudo systemctl disable <서비스명>.service
8. 활성화 상태 확인:
systemctl is-enabled <서비스명>.service
예시: 간단한 웹 서버 서비스 설정
mywebapp.service 라는 이름의 간단한 웹 서버 서비스를 systemd로 관리한다고 가정해 봅시다.
1. 서비스 파일 생성 (/etc/systemd/system/mywebapp.service):
[Unit]
Description=My Simple Web Application
After=network.target
[Service]
ExecStart=/usr/local/bin/mywebapp
Restart=on-failure
User=myuser
Group=myuser
[Install]
WantedBy=multi-user.target
Description: 서비스에 대한 설명입니다.After=network.target: 네트워크가 준비된 후에 이 서비스가 시작되도록 합니다.ExecStart: 웹 서버 실행 파일의 경로입니다.Restart=on-failure: 서비스가 비정상 종료될 경우 자동으로 재시작합니다.User,Group: 서비스를 실행할 사용자 및 그룹을 지정합니다.WantedBy=multi-user.target: 시스템이 다중 사용자 모드(일반적인 서버 환경)로 부팅될 때 이 서비스가 활성화되도록 합니다.
2. systemd 데몬 재로드: 설정 파일을 변경했으므로 systemd에게 이를 알립니다.
sudo systemctl daemon-reload
3. 서비스 시작 및 활성화:
- 시작:
sudo systemctl start mywebapp.service - 부팅 시 자동 시작 설정:
sudo systemctl enable mywebapp.service
4. 서비스 상태 확인:
systemctl status mywebapp.service
주의사항
- 권한: 서비스 파일을 수정하거나
systemctl명령어를 실행할 때는 일반적으로 root 권한(sudo)이 필요합니다. - 경로:
ExecStart에 지정하는 실행 파일의 경로는 정확해야 합니다. - 재시작 정책:
Restart옵션은no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always등이 있습니다. 서비스의 특성에 맞게 설정해야 합니다. - 로그 확인: 서비스 실행 중 문제가 발생하면
journalctl -u <서비스명>.service명령어를 사용하여 로그를 확인하는 것이 중요합니다.
systemd는 강력한 시스템 관리 도구이므로, 각 지시어의 의미를 정확히 이해하고 사용하는 것이 안정적인 서비스 운영에 필수적입니다.