.NET 애플리케이션을 Linux 시스템에서 백그라운드 서비스로 안정적으로 실행하고 관리하기 위해 Systemd를 활용하는 방법을 알아봅니다. Systemd는 현대 Linux 배포판에서 널리 사용되는 시스템 및 서비스 관리자로, 서비스의 자동 시작, 중지, 재시작 및 리소스 관리를 효율적으로 처리할 수 있습니다.
Systemd는 대부분의 주요 Linux 배포판(Ubuntu, Debian, CentOS, Fedora, RHEL 등)에서 기본 관리자로 채택되어 있어, 다양한 환경에서 일관된 방식으로 서비스를 관리할 수 있습니다. 아래 단계에 따라 .NET 애플리케이션을 Systemd 서비스로 등록하고 관리할 수 있습니다.
서비스 등록 및 관리 절차
- Systemd 서비스 유닛 파일 생성
/etc/systemd/system/ 디렉토리에
myapp.service와 같은 이름으로 유닛 파일을 생성합니다. 텍스트 편집기를 사용하여 다음 내용을 작성합니다:
[Unit]
Description=My .NET 6 Web API Application
After=network.target
[Service]
User=your_user # 애플리케이션 실행 사용자 (보안상 root 대신 지정 권장)
Group=your_group # 애플리케이션 실행 그룹
WorkingDirectory=/var/www/my-dotnet-app # 애플리케이션 실행 디렉토리
ExecStart=/usr/bin/dotnet /var/www/my-dotnet-app/YourApp.dll # 실행 명령어
Restart=on-failure # 실패 시 재시작 정책
# RestartSec=5 # 재시작 간격 (초)
# LimitNOFILE=65535 # 열 수 있는 최대 파일 핸들 수
# StandardOutput=journal # 표준 출력을 journald로 리다이렉트
# StandardError=journal # 표준 에러를 journald로 리다이렉트
[Install]
WantedBy=multi-user.target
User, Group, WorkingDirectory, ExecStart의 경로는 실제 애플리케이션 환경에 맞게 수정해야 합니다.
- 서비스 활성화 및 시작 생성한 서비스를 활성화하고 시작하기 위해 다음 명령어를 실행합니다:
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
daemon-reload는 Systemd가 새 유닛 파일을 인식하도록 합니다. enable은 시스템 부팅 시 서비스가 자동으로 시작되도록 설정하며, start는 즉시 서비스를 시작합니다.
- 서비스 상태 확인 서비스가 정상적으로 실행 중인지 확인하려면 다음 명령어를 사용합니다:
sudo systemctl status myapp.service
출력에서 Active: active (running) 상태를 확인하고, 오류 메시지가 없는지 주의 깊게 살펴봅니다.
유닛 파일 구성 요소 설명
[Unit]섹션:Description: 서비스에 대한 간단한 설명입니다.After: 서비스가 시작되기 전에 완료되어야 하는 다른 유닛(예: 네트워크)을 지정합니다.
[Service] 섹션:
User,Group: 서비스를 실행할 시스템 사용자 및 그룹을 지정합니다. 보안상의 이유로 root 권한이 아닌 특정 사용자로 실행하는 것이 좋습니다.WorkingDirectory: 서비스가 실행될 작업 디렉토리를 설정합니다.ExecStart: 서비스를 시작하기 위해 실행될 전체 명령어를 지정합니다.Restart: 서비스가 예기치 않게 종료되었을 때 재시작 정책을 설정합니다.on-failure는 오류로 종료 시 재시작합니다.always는 어떤 이유로든 종료 시 항상 재시작합니다.RestartSec: 재시작 시도 사이에 대기할 시간을 초 단위로 설정합니다.LimitNOFILE: 프로세스가 열 수 있는 최대 파일 디스크립터 수를 제한합니다.StandardOutput,StandardError: 프로세스의 표준 출력 및 표준 오류를 시스템 저널(journald)로 보내도록 설정하여 로그 관리를 용이하게 합니다.
[Install] 섹션:
WantedBy:systemctl enable명령 실행 시 이 서비스가 포함될 부팅 타겟을 지정합니다.multi-user.target은 일반적인 다중 사용자 텍스트 모드 부팅을 의미합니다.
주요 Systemd 관리 명령어
Systemd로 관리되는 .NET 애플리케이션 서비스를 제어하는 데 사용되는 일반적인 명령어는 다음과 같습니다:
- 서비스 재설정 (유닛 파일 변경 후):
sudo systemctl daemon-reload - 서비스 상태 확인:
sudo systemctl status myapp.service - 서비스 시작:
sudo systemctl start myapp.service - 서비스 중지:
sudo systemctl stop myapp.service - 서비스 재시작:
sudo systemctl restart myapp.service - 서비스 자동 시작 비활성화:
sudo systemctl disable myapp.service - 서비스 로그 확인 (journalctl 사용):
sudo journalctl -u myapp.service -f