4.10.3. 시스템 실행 및 백그라운드 구동 nohup systemd 등

자동매매 시스템을 안정적으로 운영하려면 백그라운드 구동이 필수적입니다. SSH 연결이 끊어져도 시스템은 계속 실행되어야 합니다. 시스템 재부팅 시에도 자동으로 실행되어야 합니다. nohupsystemd는 이러한 요구 사항을 충족하는 데 유용한 도구입니다.

nohup은 터미널 연결이 끊어져도 프로세스를 계속 실행하는 명령어입니다. 간단하게 사용할 수 있지만, 시스템 재부팅 시 자동 실행은 지원하지 않습니다. systemd는 시스템 서비스 관리자입니다. 시스템 부팅 시 서비스를 자동으로 시작하고, 오류 발생 시 재시작하는 기능을 제공합니다. 복잡하지만 강력한 기능을 제공합니다.

이 섹션에서는 nohupsystemd를 사용하여 자동매매 시스템을 백그라운드에서 실행하는 방법을 설명합니다. 각 도구의 장단점을 비교하고, 실제 적용 예시를 제시합니다. 자동매매 시스템 운영의 안정성을 높이는 데 도움이 될 것입니다.

단계 1: nohup을 이용한 백그라운드 실행

nohup 명령어를 사용하여 자동매매 시스템을 백그라운드에서 실행합니다. 터미널 연결이 끊어져도 시스템은 계속 실행됩니다.

nohup python main.py &
  • nohup: 터미널 연결이 끊어져도 프로세스를 계속 실행합니다.
  • python main.py: 실행할 자동매매 시스템의 메인 스크립트입니다.
  • &: 명령어를 백그라운드에서 실행합니다.

명령어 실행 후, 프로세스 ID (PID)가 출력됩니다. 이 PID를 사용하여 프로세스를 관리할 수 있습니다. 표준 출력 및 표준 에러는 nohup.out 파일에 저장됩니다.

단계 2: nohup 실행 상태 확인

ps 명령어를 사용하여 nohup으로 실행 중인 프로세스를 확인합니다.

ps aux | grep main.py
  • ps aux: 현재 실행 중인 모든 프로세스 정보를 표시합니다.
  • grep main.py: main.py를 포함하는 프로세스만 필터링합니다.

출력 결과에서 main.py 프로세스가 실행 중인지 확인합니다.

단계 3: nohup 프로세스 종료

kill 명령어를 사용하여 nohup으로 실행 중인 프로세스를 종료합니다.

kill <PID>
  • <PID>: 종료할 프로세스의 ID입니다. (예: kill 1234)

PID는 ps 명령어를 통해 확인할 수 있습니다.

단계 4: systemd 서비스 파일 생성

systemd를 사용하여 자동매매 시스템을 서비스로 등록합니다. 시스템 부팅 시 자동으로 실행되도록 설정합니다. /etc/systemd/system/ 디렉토리에 서비스 파일을 생성합니다.

sudo vi /etc/systemd/system/autotrade.service

다음 내용을 서비스 파일에 추가합니다.

[Unit]
Description=Autotrade System
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/autotrade
ExecStart=/usr/bin/python /home/ubuntu/autotrade/main.py
Restart=on-failure
StandardOutput=append:/home/ubuntu/autotrade/autotrade.log
StandardError=append:/home/ubuntu/autotrade/autotrade.log

[Install]
WantedBy=multi-user.target
  • [Unit]: 서비스에 대한 설명 및 의존성을 정의합니다.
    • Description: 서비스에 대한 설명입니다.
    • After=network.target: 네트워크가 활성화된 후에 서비스를 시작합니다.
  • [Service]: 서비스 실행 방법을 정의합니다.
    • User: 서비스를 실행할 사용자입니다.
    • WorkingDirectory: 실행할 디렉토리입니다.
    • ExecStart: 서비스를 시작하는 명령어입니다.
    • Restart=on-failure: 서비스가 실패하면 자동으로 재시작합니다.
    • StandardOutput=append:/home/ubuntu/autotrade/autotrade.log: 표준 출력을 로그 파일에 추가합니다.
    • StandardError=append:/home/ubuntu/autotrade/autotrade.log: 표준 에러를 로그 파일에 추가합니다.
  • [Install]: 서비스 활성화 방법을 정의합니다.
    • WantedBy=multi-user.target: 다중 사용자 환경에서 서비스를 활성화합니다.

단계 5: systemd 서비스 활성화 및 시작

systemd 서비스를 활성화하고 시작합니다.

sudo systemctl daemon-reload
sudo systemctl enable autotrade.service
sudo systemctl start autotrade.service
  • sudo systemctl daemon-reload: systemd 데몬을 재시작하여 서비스 파일 변경 사항을 적용합니다.
  • sudo systemctl enable autotrade.service: 시스템 부팅 시 서비스를 자동으로 시작하도록 설정합니다.
  • sudo systemctl start autotrade.service: 서비스를 즉시 시작합니다.

단계 6: systemd 서비스 상태 확인

systemctl status 명령어를 사용하여 서비스 상태를 확인합니다.

sudo systemctl status autotrade.service

출력 결과에서 서비스가 활성화되어 있는지 확인합니다. 오류 메시지가 있는지 확인합니다.

단계 7: systemd 서비스 중지 및 비활성화

systemctl stop 명령어를 사용하여 서비스를 중지합니다. systemctl disable 명령어를 사용하여 시스템 부팅 시 자동 시작을 비활성화합니다.

sudo systemctl stop autotrade.service
sudo systemctl disable autotrade.service

nohup vs systemd 비교

기능 nohup systemd
백그라운드 실행 지원 지원
자동 재시작 미지원 지원 (Restart=on-failure)
시스템 부팅 시 자동 실행 미지원 지원
로그 관리 nohup.out 파일에 저장 StandardOutput, StandardError 옵션으로 설정 가능
복잡도 간단 복잡

요약:

이 섹션에서는 자동매매 시스템을 백그라운드에서 실행하는 두 가지 방법, nohupsystemd를 살펴보았습니다. nohup은 간단하지만 자동 재시작 기능을 제공하지 않습니다. systemd는 복잡하지만 자동 재시작 및 시스템 부팅 시 자동 실행 기능을 제공합니다. 자동매매 시스템의 안정적인 운영을 위해 systemd를 사용하는 것을 권장합니다.

위로 스크롤