Discord.py
로 제작한 디스코드 봇을 GCP VM 환경에서 실행시키려고 했다.
터미널 접속해서 python3 main.py
실행시키고 터미널 끄면 봇이 죽어 있다!!
Why??
이것은 프로세스, 세션, 터미널 개념이 머릿속에 부재하여 시작된다..
리눅스에서는 터미널 세션 연결이 끊어지면, 해당 터미널에서 실행한 프로세스를 종료시킨다.
이것은 당연한 일이다. 그래서 터미널 접속이 끊겨도 프로세스를 유지하기 위한 방법들이 있다.
프로세스를 데몬으로 만들어서 백그라운드에서 실행시킨다.
이것은 가장 정석적인 방법이다.
NoHUP를 이용하여, 터미널이 끊겨도 프로세스를 종료하지 않도록 한다.
HUP란 터미널 접속이 끊길 때 가는 시그널.
no hang up! 세션과의 연결이 종료되어도 nohup으로 돌린 프로세스는 데몬 형태로 실행되게 되어 종료되지 않는다.
백그라운드 작업으로 실행하는 옵션도 존재한다.
Screen, TMUX 등을 이용하여 가상 터미널을 만들고, 가상 터미널 내에서 프로세스를 실행시킨다. 이 가상 터미널은 임의로 종료시키기 전까지 종료되지 않는다.
나는 그래서 3번 방법을 택하였고, 2주 정도 지난 시점에서 24시간 가동에 문제가 없다.
terminal multiplexer
기본 명령어
tmux
새 가상 터미널 시작tmux ls
현재 존재하는 가상 터미널 목록을 보여줌.tmux kill-session -t 0
위의 ls 해서 나오는 목록 중 0번 터미널의 연결을 끊어 버림.데몬 daemon
프로세스
세션
터미널
https://stackoverflow.com/questions/69521175/maintaining-24-7-discord-bot-uptime-on-compute-engine