본문 바로가기
프로그래밍/Python

[Python] 백그라운드에서 파이썬 코드 실행하기

by 쿼카퀀트 2021. 8. 29.
728x90

트레이딩 알고리즘, 혹은 자동 메일링 기능과 같이 멈춤 없이 24시간 실행해야 하는 코드를 만들어 보셨나요? 아마 프로그램 매매를 하시려는 분들은 한번쯤은 시도해보셨을 겁니다ㅎㅎ

 

그냥 주피터에서 파이썬 코드를 실행시켜두면 되는거 아닌가요? 그렇다면 지금 실행중인 주피터를 종료하자마자 프로그램이 죽어버린다는 큰 문제를 마주하실 겁니다. 유튜브르 보다가 실수로 같은 탭에 켜져있는 주피터를 종료하게 된다면 너무 슬픈 일이겠죠...

 

그렇기 때문에, 오늘은 nohup을 사용해, 주피터를 꺼도 백그라운드에서 파이썬 코드가 계속 돌아가도록 만들어 보겠습니다. 아, 참고로 nohup은 리눅스 환경에서 지원됩니다.

 

1. 파이썬 파일 준비

파이썬 코드를 백그라운드에서 돌리려면 가장 중요한게 뭘까요? 네 그렇습니다. 파이썬 파일이 있어야겠죠~

주피터 노트북 파일(.ipynb)이 아니라 파이썬 파일(.py)을 준비해줍시다.

 

아 물론 24시간 계속 실행되도록 하기 위해선, 파이썬 코드를 아래처럼 While True: 같은 반복문으로 감싸줘야합니다. nohup은 단순히 백그라운드에서 파이썬 파일을 돌려주는 기능이기에, 반복문이 없다면 딱 한번 돌아가고 종료됩니다.

 

  • 파이썬 파일 예시
While True:
	print('wow~')

 

2. nohup 으로 백그라운드에서 파이썬 파일 실행

자, 이제 파이썬이 연결됐다면 바로 실행시켜봅시다.

 

해당 파이썬 파일이 있는 폴더까지 이동합니다. 제 경우 /quant/coin_strategy폴더로 이동했습니다. 여기에 있는 coin_sample.py 파일을 nohup을 사용해 실행시켜보겠습니다.

 

간단하게 한 줄로 가능한데요, 아래처럼 nohup 코드를 입력해줍니다.

nohup python3 -u coin_sample.py

그러면 nohup: ignoring input and appending output to 'nohup.out'이라는 메세지가 뜹니다. 이 메세지가 뜬다면 제대로 nohup이 실행된겁니다.

 

만약 무한반복되는 코드를 nohup으로 돌렸다면, nohup: ignoring input ~~ 메세지가 뜨고선 아래줄에 새로운 커맨드 입력창이 뜨지 않습니다. 이때 Ctrl+C를 치면 nohup도 같이 종료되니까, Ctrl+C를 누르지 말고, 커맨드 창을 통째로 닫아주세요.

 

3. nohup 실행 확인

nohup이 제대로 실행되고 있는지 확인해봅시다.

다시 커맨드를 켠 후, 커맨드창에 아래 코드를 입력해주세요.

ps -ef | grep coin_sample.py

이 커맨드는 ps -ef로 현재 실행중인 프로세스 리스트를 모두 받아온 후, coin_sample.py라는 단어가 들어있는 프로세스만을 뽑아내는 기능입니다.

예시로 현재 제 pc에서 실행중인 프로세스 중 coin을 검색해보면, 첫 번째 줄에 python3 -u btc_coin.py라는 문장이 보이는데요, 이렇게 python3 -u(혹은 python -u)라는 단어가 들어간 것이 nohup으로 실행한 프로세스입니다.

이렇게 프로세스가 제대로 실행중인지 확인할 수 있습니다.

 

4. nohup 종료 및 재시작

지금 돌아가고 있는 파이썬 파일을 업데이트하고 싶다면 어떻게 할까요?

그냥 파이썬 파일을 열어 수정하는 걸로는 부족합니다. nohup을 종료하고, 다시 시작시켜야만 수정한 파이썬 코드가 돌아가게 됩니다.

위 스크린샷의 python3 -u btc_coin 왼쪽에 1173 이라는 숫자가 떠 있는데요, 이 숫자는 해당 프로세스의 아이디를 의미합니다. 이 아이디를 가지고 nohup을 종료할 수 있습니다.

이렇게 입력해주세요.

-- 1173 대신 자신의 nohup 프로세스 아이디를 입력하기! --
kill 1173

이렇게 하고 다시 아래 코드처럼 'coin'이란 단어가 들어간 프로세스를 검색해보면, nohup 프로세스가 리스트에서 사라진 것을 확인할 수 있습니다.

ps -ef|grep coin

 

이제 다시 목차 2번에서 설명했던 방법 그대로 nohup을 재실행하면 됩니다!

 

5. 로그 확인

지금 실행중인 nohup의 로그를 확인하는 방법 역시 중요하겠죠?

nohup으로 실행한 파이썬 파일의 폴더에 접속해보면, 아래 스크린샷과 같이 nohup.out이란 파일이 생겨있습니다.

 

파이썬 코드에 존재하는 모든 print문, 혹은 에러 출력은 이 nohup.out파일에 로그 형식으로 기록됩니다. 따라서 코드에서 어떤 정보들이 print되고 있는지(혹은 어떤 에러가 발생했는지) 알고싶다면, nohup.out 파일을 열어 실시간으로 확인할 수 있습니다.

 

아래 코드로 이 파일을 열어볼 수 있습니다.

vi nohup.out

 

혹은, 파일을 열지 않고 가장 최근 로그만 확인하고 싶다면 아래 코드를 입력하세요.

tail -f nohup.out

 

 

이렇게 하면 nohup을 사용해 백그라운드에서 파이썬 코드를 돌리는 방법을 마스터했습니다!

참고로, 꼭 무한반복되는 코드가 아니더라도, 한번 실행되는데에 시간이 오래 걸리는 코드도 nohup으로 백그라운드에서 실행시켜놓는 경우도 많습니다.

nohup으로 코딩 화이팅하세요!

728x90

댓글