학교 db수업 과제를 서버를 통해 배포하기 위해 ec2를 사용하였다. ec2 클라우드 컴퓨터 내에서 서버가 정상적으로 동작하는 것을 모두 확인하고 배포만 남은 상황이였다.
python3 manage.py runserver
를 통해 기존처럼 배포를 했지만 문제점은 셸을 끄면 python3 프로세스도 자동적으로 종료되어 버린다는 점이다.
이를 해결하기 위해 nohup
명령어를 사용했다.
nohup
명령어는 프로세스를 백그라운드에서 실행할 수 있게 해주는 명령어이다.
nohup [PROCESS_NAME] &
위처럼 프로세스 이름을 nohup 명령어 뒤에 적고 마지막에 &를 붙이고 실행하면 프로세스가 쉘을 종료시켜도 백그라운드에서 동작하게 된다.
예를 들어 실행시키고 싶은 명령어가 python3 manage.py runserver
라면
nohup python3 manage.py runserver &
위처럼 명령어를 입력한다. 그 후
nohup: ignoring input and appending output to ‘nohup.out’
라는 메시지가 뜨면 정상적으로 완료된것이다. 이 메시지는 프로세스의 stdout을 nohup.out
파일로 저장하겠다는 뜻이며 nohup.out 파일을 확인하면 모든 기록을 볼 수있다.
그 후 exit
명령어를 통해 쉘을 꺼주어야 정상적으로 백그라운드 프로세스가 실행된다. 난 exit
명령어를 사용하지 않고 바로 쉘을 껐었는데 이때 백그라운드 프로세스가 계속 실행되지 않고 종료되었었다.
실행중은 백그라운드 프로세스의 종료는 kill
명령어를 사용한다.
ubuntu@ip-172-31-34-148:~$ ps -ef | grep python3 root 451 1 0 Dec21 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers root 621 1 0 Dec21 ? 00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal ubuntu 37984 1 0 01:35 ? 00:00:00 python3 manage.py runserver ubuntu 37986 37984 0 01:35 ? 00:00:10 /usr/bin/python3 manage.py runserver ubuntu 39032 39022 0 02:11 pts/0 00:00:00 grep --color=auto python3 ubuntu@ip-172-31-34-148:~$ kill -9 37986
위 처럼 ps
명령어로 프로세스를 찾고 프로세스의 ID를 찾아 종료시킨다.