자동매매 시스템을 안정적으로 운영하려면 백그라운드 구동이 필수적입니다. SSH 연결이 끊어져도 시스템은 계속 실행되어야 합니다. 시스템 재부팅 시에도 자동으로 실행되어야 합니다. nohup
과 systemd
는 이러한 요구 사항을 충족하는 데 유용한 도구입니다.
nohup
은 터미널 연결이 끊어져도 프로세스를 계속 실행하는 명령어입니다. 간단하게 사용할 수 있지만, 시스템 재부팅 시 자동 실행은 지원하지 않습니다. systemd
는 시스템 서비스 관리자입니다. 시스템 부팅 시 서비스를 자동으로 시작하고, 오류 발생 시 재시작하는 기능을 제공합니다. 복잡하지만 강력한 기능을 제공합니다.
이 섹션에서는 nohup
과 systemd
를 사용하여 자동매매 시스템을 백그라운드에서 실행하는 방법을 설명합니다. 각 도구의 장단점을 비교하고, 실제 적용 예시를 제시합니다. 자동매매 시스템 운영의 안정성을 높이는 데 도움이 될 것입니다.
단계 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 옵션으로 설정 가능 |
복잡도 | 간단 | 복잡 |
요약:
이 섹션에서는 자동매매 시스템을 백그라운드에서 실행하는 두 가지 방법, nohup
과 systemd
를 살펴보았습니다. nohup
은 간단하지만 자동 재시작 기능을 제공하지 않습니다. systemd
는 복잡하지만 자동 재시작 및 시스템 부팅 시 자동 실행 기능을 제공합니다. 자동매매 시스템의 안정적인 운영을 위해 systemd
를 사용하는 것을 권장합니다.