개발/Linux

Linux screen

박붕어 2023. 12. 14. 01:24

리눅스에서 긴 백그라운드 작업을 실행하는게 귀찮을 때가 있다. 

리눅스에서 작업을 하다보면, 아주 큰 파일을 복사하거나 배치작업을 수행하거나 등등 시간이 오래 걸리는 작업을 수행하는 경우가 있다. 

이런 경우에, 네트워크 문제가 발생하여 세션 연결이 끊기거나 작업중인 것을 깜빡하고 터미널을 닫는 경우 아주 곤란해지곤 한다. 

물론 nohub이라는 아주 좋은 프로세스를 백그라운드로 실행하는 방법이 있다. 하지만 nohub도 몇가지 불편한 점이 있는데.

 

1. nohub의 경우 프로세스 자체가 백그라운드로 돌기 때문에 프로세스의 표준 출력이나 표준 에러를 잘 기록하도록 설정해주어야 한다. 

2. 작업을 중단하려는 경우 프로세스를 죽여야한다. 프로세스를 죽이는 명령어를 자주 까먹곤 한다. 

3. 작업의 중간에 입력을 받을 수 없다. 진행중인 작업 중간에 입력을 받을 수 있도록 만들 수 없다. 

 

Screen 이란 

이러한 문제점 때문에 새로운 방식을 찾다가, screen 이라는 프로그램을 사용하는 방법을 찾았다. 

screen은 리눅스 시스템에서 사용되는 터미널 멀티플렉서이며 다음 기능을 제공한다. 

 

1. 세션 관리 

screen을 사용해서 터미널 세션을 생성, 삭제 할 수 있다. 여러개의 세션을 만들어 여러 작업을 동시에 수행할 수 있다. 

즉, 콘솔을 여러개 켜놓는 것과 동일하게 작업할 수 있다. 물론 세션간의 이동은 귀찮을 수 있다. 

 

2. 백그라운드 실행 

사용자가 세션에서 로그아웃 하더라도 screen을 통해 생성한 세션은 백그라운드에서 계속 실행된다. 따라서 세션을 생성하고 작업 중, 해당 세션을 백그라운드로 돌릴 수 있다. 

 

3. 세션 복구

나중에 다시 세션에 로그인하여 작업 실행 결과 등을 확인할 수 있다. 

집에서 세션을 만들어 작업을 수행시켜놓고, 로그아웃 한 뒤 회사로 가서 세션에 다시 로그인해 작업의 결과를 확인할 수 있는 것이다. 

 

Screen 사용법 

 

기본적으로 screen을 사용하는 방법은 다음과 같다. 

평소에 거의 해당 4개의 명령어만 자주 사용하게 된다. 

 

1. 세션 생성 

screen -R {session name} 명령어를 사용해 새로운 세션을 생성하고 동시에 세션에 접속할 수 있다. 

screen -R test

 

2. 세션 리스트 보기 

screen -list 명령어를 사용해 세션의 리스트를 볼 수 있다. 

screen -list
There are screens on:
	11924.test	(Detached)
	12289.test	(Attached)

 

현재 로그인 되어있는 세션은 Attached로, 로그아웃 되어있는 세션은 Detached로 노출된다. 

 

3. 로그아웃 하기 

ctrl + a + d 를 눌러 접속되어 있는 세션에서 로그아웃 할 수 있다. 

 

4. 로그인하기 

screen -r {session name} 명령어를 사용해 세션에 로그인할 수 있다. 

{session name} 이름의 세션이 존재하지 않으면 세션에 로그인 되지 않는다. 

 

Screen은 강력하다. 

이 외에도, Screen은 여러 창을 분할하여 사용하거나, 세션을 여러 사용자와 공유하는 등 다양한 옵션이 존재한다. 

따라서 Screen을 동시 작업을 하기 위해 사용하거나 사용자 별 분리를 위해 사용할 수 도 있다. 

하지만 지금은 백그라운드 작업을 수행하기 위해서만 사용하고 있다. 

더 강력한 기능들을 사용해보고 배워서 다시 돌아오자.