데몬 (ft. screen)

jj·2021년 7월 21일
0
post-thumbnail
post-custom-banner

서버를 쓸때, (나는 맥 유저이기 때문에) ssh로 접속해서 코드를 돌리곤 한다.
그런데 이게 한 두시간 걸리는 코드라면 모를까 3일 풀로 돌려야하는 딥러닝 모델이라면 하루종일 내 맥북을 켜놓을 수도 없고 참 골치 아프다. 특히 요즘 내 맥북이 엄청 열을 내고 시끄러운 사춘기를 거치고 있기 때문에 더 부담스러웠다.
예전에 크롤링때문에 데몬을 통해 크론잡을 실행시킨 적이 있었는데, 그때 처음 "데몬"이라는 것의 존재를 알게 되었다.
이번에는 딥러닝 모델을 오래 학습시켜야할 일이 생겨서 본격적으로 데몬에 대해 알아보고자 한다.

데몬

처음에 데몬이라는 용어를 듣고 떠올랐던 마왕몬...!

디지몬 시리즈의 궁극체 마왕형 디지몬. 초궁극체로 진화할 수 있는 극소수의 디지몬 중 하나이기도 하다.

최초로 설정이 구축된 마왕형 디지몬. 공개된 지 한참 후에 디지몬 TCG를 통해 7대 마왕에 편입되었다. 하지만 공개 초기나 지금이나 디지몬 웹의 도감엔 7대 마왕 언급이 없다. 7대 마왕으로서 관장하는 대죄는 분노. 모티브는 사탄.

일본판 명칭은 데몬, 영문판은 Daemon[4][5]

...을 말하는 게 아니다...
그래도 처음에는 도대체 왜 백그라운드에서 코드를 실행시키는 것을 "데몬"이라고 하는 지 도통 이해가 안가긴 했다.

ANYWAY
데몬은 사용자가 직접 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다.그러나 데몬의 갯수가 늘어나면 어떤 데몬이 백그라운드로 떠 있는지 구분이 어렵고, 다른 유저로 실행한 경우 모든 사용자의 프로세스를 뒤져서 찾아야 하는 어려움이 있다.
백그라운드 프로세스의 반대는 포그라운드(foreground) 프로세스라고 한다. 사용자와의 대화창구인 표준 입출력장치(터미널과 키보드 -> tty) 를 통해 대화한다. 그러나 백그라운드 프로세스는 입력장치에 대해 터미널과의 관계를 끊은 모든 프로세스를 의미한다.
데몬에 대한 더 자세한 설명은 이 블로그를 보면 된다. 정말 너무 잘 설명해주셨다..정말 최고다
https://blogger.pe.kr/770

이러한 데몬을 구현시키는 방법은 여러가지가 있다.
Docker, Terminal Multiplexer, screen, tmux 등이 있다.
이 글에서는 screen만 살펴볼 것이다.

screen

스크린은 물리적인 터미널을 다중화하여 사용할 수 있는 윈도우 매니저이다. 각 가상터미널은 독립적으로 동작하며, 사용자 세션이 분리되어도 동작한다. 즉, 이 도구는 백그라운드로 동작하는 다중 터미널을 만들어 주게 된다.
스크린 상에 여러 윈도우를 실행하고 각각 다른 작업을 실행할 수 있다.

스크린을 2개 띄울 수도 있다.
그리고 ssh연결이 끊어지거나 원격 연결을 종료하여도 스크린은 살아있게 되고, 스크린 상에서 실행한 작업도 계속 실행된다.
위의 그림에서는 클라이언트인 노트북에서는 차이가 없고, 서버에서의 스크린 사용여부가 다르다.


이런식으로 스크린을 사용할 수 있다.
스크린을 사용하면, 터미널을 한번만 로그인한 후 여러 쉘과 프로그램을 사용할 수 있다. 예를 들어 원격 서버에 접속을 하다가 네트워크 장애로 연결이 끊길 수 있는데, 이 경우 스크린을 사용하면 세션을 유지할 수 있다. 또한 하나의 서버에 여러명의 사용자가 접속하여 해당 스크린을 공유하여, 같은 화면 공유할 수도 있다!

그래서 어떻게 screen을 사용하는데?

가장 간단하게는
$ screen
이라는 명령어로 바로 스크린을 만들 수 있다.
이때 스크린 이름은 랜덤으로 생성되고 screen -ls 를 통해 생성된 스크린 리스트를 살펴볼 수 있다.

그런데 처음 스크린을 만들면 띠용! 한다!
밑에 두개의 터미널을 띄워놓았다.
위에는 내가 로컬에서 원격서버로 접속한 후의 화면이고, 밑은 스크린을 만들고 난 다음의 화면이다...

즌혀 차이가 없다...
와 이거 깜짝 놀라서 서치를 해보니까 다음과 같은 조언을 찾아볼 수 있었다.

처음 screen을 쓰면, 기본 터미널과 같은 화면이 나오기 때문에 몇번째 스크린인지 알기 어렵습니다. 그래서 홈 디렉터리에. screenrc 파일을 만들고 환경설정을 하면 screen을 보다 쉽게 사용할 수 있습니다.
터미널 환경 설정은 다음 블로그를 참고하면 쉽게 할 수 있다.
https://bio-info.tistory.com/42
그 결과 나는 다음과 같은 멋들어진 스크린을 얻게 되었다. 예~!!

이제는 내가 진짜 원했던 데몬 프로세스를 만들 차례이다.
내가 원하는 이름의 스크린을 만들어서 run.sh를 실행시키고
ctrl+a,d 를 눌러서 detach한다.

처음에는 이거 detach해도 돌아가는게 맞는 것인지 너무너무 두려웠다.
attach와 detach가 무엇이냐 하면,
attach: 스크린을 불러오기
detach: 현재 열려있는 스크린을 다시 집어넣기 -> detach된 세션들은 언제든지 다시 불러올 수 있다.
그러니까 detach 시켜도 백그라운드에 계속 남아있기 때문에 언제든지 콘솔로 접속해서 restore할 수 있다. 걱정하지 않아도 된다!
restore 하려면 screen -r <screen name>을 치면 된다.
아예 스크린 세션을 삭제하려면 스크린에 attach 한뒤 exit을 치고 빠져나오면 된다

그래서 진짜 데몬이 되었는지 확인해보자
ps -ef를 통해 현재 실행되고 있는 process status 의, entire 정보를 fully 볼 것이다.
예를 들어 내가 실행하고 있는 프로세스 이름에 "pa"가 들어간다면 ps -ef | grep pa를 써서 필터링 할 수 있다.
다른 프로세스들은 가렸고, 내가 현재 스크린으로 실행하고 있는 parallelWaveGan만 확인할 수 있다.
이 친구는 tty가 없고, PPID를 보면 1인것을 확인할 수 있다 => 데몬의 특징

References

https://dreamlog.tistory.com/
http://docs.likejazz.com/screen/
https://blogger.pe.kr/770
http://www.incodom.kr/Linux/%EA%B8%B0%EB%B3%B8%EB%AA%85%EB%A0%B9%EC%96%B4/screen
https://bio-info.tistory.com/42
https://uroa.tistory.com/110
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=seuis398&logNo=70082400723

profile
재밌는게 재밌는거다
post-custom-banner

0개의 댓글