Linux / 명령어 / screen

리눅스 서버를 사용하다 보면 SSH로 원격 접속한 상태에서 오래 걸리는 작업을 실행해야 할 때가 많습니다. 예를 들어 대용량 파일 압축, 데이터 백업, 프로그램 빌드, 로그 모니터링, 서버 업데이트, 장시간 실행되는 스크립트 등이 있습니다. 이때 SSH 연결이 끊기면 실행 중이던 작업도 함께 종료될 수 있습니다. 이런 문제를 해결할 때 자주 사용하는 명령어가 바로 리눅스 screen 명령어입니다.

screen 명령어란?

screen은 하나의 터미널 안에서 여러 개의 가상 터미널 세션을 만들고 관리할 수 있는 프로그램입니다. 쉽게 말하면, 현재 터미널 작업을 하나의 독립된 공간에 저장해두고 필요할 때 다시 불러오는 기능이라고 이해하면 됩니다.

일반적으로 SSH로 서버에 접속한 뒤 명령어를 실행하면 해당 명령어는 현재 SSH 세션에 종속됩니다. 그래서 인터넷 연결이 끊기거나 터미널 창을 닫으면 실행 중인 작업도 종료될 수 있습니다. 하지만 screen 안에서 작업을 실행하면 SSH 연결이 끊겨도 작업은 서버 안에서 계속 실행됩니다.

즉, screen 명령어의 핵심 기능은 다음과 같습니다.

  • screen 세션 생성
  • 작업을 백그라운드로 분리
  • 끊긴 세션에 다시 접속
  • 하나의 SSH 접속에서 여러 터미널 사용
  • 장시간 작업 안정적으로 실행

screen 설치 방법

대부분의 리눅스 배포판에서는 screen이 기본 설치되어 있거나 패키지 관리자를 통해 쉽게 설치할 수 있습니다.

Ubuntu 또는 Debian 계열에서는 다음 명령어를 사용합니다.

sudo apt update
sudo apt install screen

Rocky Linux, AlmaLinux, CentOS, RHEL 계열에서는 다음 명령어를 사용할 수 있습니다.

sudo dnf install screen

구버전 CentOS에서는 yum을 사용합니다.

sudo yum install screen

설치가 완료되었는지 확인하려면 다음 명령어를 입력합니다.

screen --version

정상적으로 설치되어 있다면 screen 버전 정보가 표시됩니다.

screen 세션 시작하기

가장 기본적인 사용법은 단순히 screen 명령어를 입력하는 것입니다.

screen

명령어를 실행하면 새로운 screen 세션이 열립니다. 처음 실행할 때 안내 문구가 표시될 수 있으며, Enter 키를 누르면 일반 터미널처럼 사용할 수 있습니다.

이제 이 안에서 명령어를 실행하면 해당 작업은 screen 세션 안에서 실행됩니다. 예를 들어 장시간 실행되는 스크립트를 실행할 수 있습니다.

python3 backup.py

또는 로그를 계속 확인할 수도 있습니다.

tail -f /var/log/syslog

이름을 지정하여 screen 세션 만들기

실무에서는 여러 개의 screen 세션을 사용할 수 있기 때문에 이름을 지정하는 것이 좋습니다. 이름을 지정하면 나중에 어떤 작업이 실행 중인지 쉽게 구분할 수 있습니다.

screen -S backup

위 명령어는 backup이라는 이름의 screen 세션을 생성합니다.

예를 들어 웹 서버 로그 확인용 세션은 다음처럼 만들 수 있습니다.

screen -S log-monitor

DB 백업용 세션은 다음처럼 만들 수 있습니다.

screen -S db-backup

세션 이름을 명확하게 지정하면 서버 작업을 관리하기 훨씬 편해집니다.

screen 세션에서 빠져나오기

screen을 사용하는 가장 중요한 이유는 작업을 종료하지 않고 세션에서 빠져나오는 것입니다. 이를 detach라고 합니다.

screen 세션 안에서 다음 키 조합을 누릅니다.

Ctrl + A 누른 뒤 D

즉, Ctrl 키와 A 키를 동시에 누른 다음, 손을 떼고 D 키를 누르면 됩니다.

그러면 다음과 같은 메시지가 표시될 수 있습니다.

[detached from 12345.backup]

이 상태가 되면 현재 터미널에서는 screen 세션에서 빠져나왔지만, screen 안에서 실행 중이던 작업은 계속 유지됩니다.

주의할 점은 exit 명령어를 입력하면 screen 세션 자체가 종료된다는 것입니다. 작업을 계속 유지하고 싶다면 exit가 아니라 반드시 Ctrl + A 후 D를 사용해야 합니다.

실행 중인 screen 세션 확인하기

현재 서버에서 실행 중인 screen 세션 목록을 확인하려면 다음 명령어를 사용합니다.

screen -ls

예시 결과는 다음과 같습니다.

There are screens on:
    12345.backup    (Detached)
    12380.log-monitor    (Detached)
2 Sockets in /run/screen/S-user.

여기서 Detached는 현재 분리되어 백그라운드에서 실행 중인 세션이라는 뜻입니다. Attached는 누군가 현재 해당 screen 세션에 접속 중이라는 뜻입니다.

기존 screen 세션에 다시 접속하기

분리된 screen 세션에 다시 접속하려면 screen -r 명령어를 사용합니다.

세션이 하나만 있을 경우 다음 명령어로 바로 접속할 수 있습니다.

screen -r

여러 개의 세션이 있다면 세션 이름이나 번호를 지정해야 합니다.

screen -r backup

또는 세션 ID를 사용해 접속할 수도 있습니다.

screen -r 12345

이렇게 하면 이전에 실행하던 작업 화면으로 그대로 돌아갈 수 있습니다. 예를 들어 백업 진행 중이던 화면, 로그 모니터링 화면, 컴파일 중이던 화면 등을 다시 확인할 수 있습니다.

Attached 상태의 screen 세션에 접속하기

가끔 screen -r을 실행했을 때 이미 세션이 사용 중이라는 메시지가 나올 수 있습니다. 이 경우 해당 세션이 Attached 상태일 가능성이 있습니다.

이때 강제로 기존 연결을 분리하고 현재 터미널에서 다시 접속하려면 다음 명령어를 사용합니다.

screen -d -r 세션이름

예를 들어 backup 세션에 다시 접속하려면 다음과 같이 입력합니다.

screen -d -r backup

이 명령어는 기존에 붙어 있던 연결을 detach한 뒤 현재 터미널에서 해당 screen 세션에 attach합니다. SSH 연결이 비정상적으로 끊겼는데 screen 세션이 계속 Attached 상태로 남아 있을 때 유용합니다.

screen 세션 종료하기

screen 세션을 완전히 종료하려면 해당 세션 안에서 exit 명령어를 입력하면 됩니다.

exit

또는 실행 중인 프로세스를 종료한 뒤 쉘에서 다시 exit를 입력하면 screen 세션이 닫힙니다.

세션이 종료되면 다음과 같은 메시지가 표시될 수 있습니다.

[screen is terminating]

현재 사용하지 않는 screen 세션은 정리해주는 것이 좋습니다. 너무 많은 세션을 만들고 방치하면 어떤 작업이 실행 중인지 헷갈릴 수 있습니다.

screen 안에서 새 창 만들기

screen은 하나의 세션 안에서 여러 개의 터미널 창을 만들 수 있습니다. 새 창을 만들려면 다음 키 조합을 사용합니다.

Ctrl + A 누른 뒤 C

새로운 터미널 창이 생성됩니다. 예를 들어 하나의 screen 세션 안에서 첫 번째 창은 로그 확인, 두 번째 창은 설정 파일 편집, 세 번째 창은 명령어 실행 용도로 사용할 수 있습니다.

창 이동은 다음 키 조합으로 할 수 있습니다.

다음 창으로 이동:

Ctrl + A 누른 뒤 N

이전 창으로 이동:

Ctrl + A 누른 뒤 P

창 목록 보기:

Ctrl + A 누른 뒤 "

현재 창 종료:

exit

screen을 단순히 세션 유지 용도로만 사용해도 충분히 유용하지만, 여러 창 기능까지 활용하면 원격 서버 작업 효율이 더 좋아집니다.

screen 명령어 자주 쓰는 옵션 정리

리눅스 screen 명령어에서 자주 사용하는 옵션은 다음과 같습니다.

명령어 설명
screen 새 screen 세션 시작
screen -S 이름 이름을 지정하여 새 세션 시작
screen -ls 실행 중인 screen 세션 목록 확인
screen -r 분리된 세션에 다시 접속
screen -r 이름 특정 이름의 세션에 다시 접속
screen -d -r 이름 기존 연결을 끊고 세션에 다시 접속
exit 현재 screen 세션 또는 창 종료

단축키도 함께 기억해두면 좋습니다.

단축키 설명
Ctrl + A 후 D 세션 분리
Ctrl + A 후 C 새 창 만들기
Ctrl + A 후 N 다음 창으로 이동
Ctrl + A 후 P 이전 창으로 이동
Ctrl + A 후 " 창 목록 보기
Ctrl + A 후 K 현재 창 종료

screen 사용 예시

가장 대표적인 예시는 백업 작업입니다.

screen -S backup
tar -czvf home-backup.tar.gz /home

백업이 오래 걸릴 경우 다음 키 조합으로 세션을 분리합니다.

Ctrl + A 후 D

이후 SSH 접속을 종료해도 백업 작업은 계속 진행됩니다.

나중에 다시 서버에 접속한 뒤 다음 명령어로 백업 상태를 확인합니다.

screen -r backup

또 다른 예시는 서버 로그 모니터링입니다.

screen -S nginx-log
tail -f /var/log/nginx/access.log

로그 확인 작업을 유지한 채 다른 작업을 하려면 detach하면 됩니다.

Ctrl + A 후 D

필요할 때 다시 접속합니다.

screen -r nginx-log

screen과 nohup의 차이

리눅스에서 장시간 작업을 유지할 때 nohup도 자주 사용됩니다. 하지만 screen과 nohup은 사용 방식이 다릅니다.

nohup은 명령어를 백그라운드에서 계속 실행하도록 만드는 방식입니다. 실행 후 터미널 화면으로 다시 돌아가 작업 과정을 직접 확인하기는 불편합니다. 반면 screen은 작업 중인 터미널 화면 자체를 그대로 보존합니다. 나중에 다시 접속하면 실행 중인 프로그램 화면을 그대로 확인할 수 있습니다.

예를 들어 단순히 스크립트를 백그라운드에서 실행하고 로그 파일만 확인하면 된다면 nohup이 적합할 수 있습니다.

nohup python3 app.py > app.log 2>&1 &

하지만 작업 화면을 다시 확인하거나 중간에 명령어를 입력해야 한다면 screen이 더 편리합니다.

screen 사용 시 주의할 점

screen 세션을 사용할 때는 세션 이름을 명확하게 지정하는 것이 좋습니다. screen만 입력해서 세션을 만들면 나중에 여러 세션이 생겼을 때 구분하기 어렵습니다.

또한 작업을 유지하려는 경우에는 exit를 입력하지 말고 반드시 Ctrl + A 후 D로 빠져나와야 합니다. exit는 세션을 종료하는 명령어이므로 실행 중인 작업도 함께 종료될 수 있습니다.

서버를 재부팅하면 screen 세션도 사라집니다. screen은 SSH 연결이 끊겨도 작업을 유지해주지만, 서버 자체가 재시작되는 상황까지 작업을 보존하지는 않습니다. 따라서 중요한 작업은 로그 파일을 남기거나 별도의 서비스 관리 도구를 사용하는 것이 좋습니다.