우분투 screen 명령어 사용법: 세션 유지와 백그라운드 작업 완벽 정리

개요

Ubuntu 원격 서버 환경에서 SSH 연결이 끊겨도 작업이 중단되지 않도록 돕는 핵심 유틸리티인 screen의 실무 활용법을 알아봅니다. 세션 생성부터 백그라운드 작업 유지, 비정상 세션 복구 및 필수 환경 설정까지 자주 발생하는 문제 해결 패턴을 단계별로 안내합니다.

screen 설치 및 세션 생성과 목록 조회

screen 명령어 실습을 진행하기 위해 패키지 목록을 최신 상태로 갱신하고 screen 패키지를 설치합니다.

sudo apt-get update -qq && sudo apt-get install -y screen

screen -version 명령어를 실행하여 설치된 screen 유틸리티의 버전 정보를 확인합니다.
출력된 결과를 통해 정상적으로 패키지가 설치되어 사용할 준비가 되었음을 확인할 수 있습니다.
⚙️ [주요 옵션]

-S : 생성할 세션의 이름을 사용자가 직접 지정합니다.
-ls : 현재 실행 중인 모든 세션의 목록과 연결 상태를 조회합니다.
-d : 접속 중인 세션을 화면에서 분리(Detach)하여 백그라운드로 전환합니다.
-m : 세션을 강제로 새로 생성하며, 주로 백그라운드 작업 시작 시 사용합니다.
-r : 백그라운드로 분리되어 있는 세션에 다시 접속(Attach)합니다.
-wipe : 비정상적으로 종료되어 도달할 수 없는 세션 항목을 정리합니다.

screen -version

screen -S backup_task -d -m sleep 60 명령어는 세션 화면으로 진입하지 않고 백그라운드에서 즉시 명령어를 구동하는 세션을 생성합니다.
-S backup_task 옵션으로 식별할 세션명을 지정하고, -d -m 옵션을 조합하여 sleep 60 작업을 백그라운드 상태로 실행합니다.

screen -S backup_task -d -m sleep 60

screen -ls 명령어를 실행하여 현재 시스템에서 동작 중인 세션 목록을 조회합니다.
실행 결과를 통해 앞서 생성한 backup_task 세션이 고유 식별 번호와 함께 백그라운드 상태(Detached)로 정상 유지되고 있음을 알 수 있습니다.

screen -ls

백그라운드 작업 실행 및 상태 모니터링

백그라운드 작업의 로그를 저장할 실습 디렉터리와 초기 로그 파일을 생성하기 위해 mkdir -p ~/screen_demo && echo '작업 준비 완료' > ~/screen_demo/task.log 명령어를 실행합니다.

mkdir -p ~/screen_demo && echo ‘작업 준비 완료’ > ~/screen_demo/task.log

screen -S build_job -d -m bash -c 'for i in {1..5}; do echo "진행 단계: $i" >> ~/screen_demo/task.log; sleep 1; done' 명령어는 반복 스크립트를 세션 진입 없이 백그라운드에서 즉시 구동합니다.
-S build_job 옵션으로 세션명을 지정하고 -d -m 옵션을 사용하여 1초 간격으로 로그를 기록하는 작업을 백그라운드 세션으로 안전하게 실행합니다.

screen -S build_job -d -m bash -c ‘for i in {1..5}; do echo “진행 단계: $i” » ~/screen_demo/task.log; sleep 1; done’

screen -ls 명령어를 실행하여 현재 시스템에서 동작 중인 세션 목록을 확인합니다.
출력 결과를 통해 새로 생성된 build_job 세션과 기존의 backup_task 세션이 모두 백그라운드(Detached) 상태로 정상 유지되고 있음을 알 수 있습니다.

screen -ls

스크립트가 백그라운드에서 정상 동작하고 있는지 확인하기 위해 sleep 2 && cat ~/screen_demo/task.log 명령어로 2초 대기 후 누적된 로그 내용을 출력합니다.
출력된 결과를 통해 백그라운드 세션에서 진행 단계가 순차적으로 기록되며 작업이 문제없이 수행되고 있음을 검증할 수 있습니다.

sleep 2 && cat ~/screen_demo/task.log

비정상 종료 세션 강제 정리 및 복구

강제 종료 및 세션 정리 실습을 진행하기 위해 screen -S zombie_task -d -m sleep 100 명령어를 실행합니다.
-S zombie_task 옵션으로 세션명을 지정하고 -d -m 옵션을 조합하여 sleep 100 작업을 백그라운드 상태로 즉시 구동합니다.

screen -S zombie_task -d -m sleep 100

screen -ls 명령어를 실행하여 현재 시스템에서 동작 중인 세션 목록을 조회합니다.
출력 결과를 통해 앞서 생성한 zombie_task 세션을 포함하여 총 3개의 세션이 백그라운드(Detached) 상태로 정상 유지되고 있음을 확인할 수 있습니다.

screen -ls

screen -S zombie_task -X quit 명령어는 세션 화면에 직접 진입하지 않고 외부에서 특정 세션을 안전하게 종료합니다.
-S zombie_task 옵션으로 대상 세션을 지정하고 -X quit 명령을 전달하여 백그라운드 작업을 중단하고 해당 세션을 완전히 종료합니다.

screen -S zombie_task -X quit

screen -wipe 명령어는 비정상적으로 끊기거나 연결이 유실된 유령 세션(Dead session) 소켓을 검사하여 정리합니다.
실행 결과를 통해 세션 소켓 상태를 점검하고 정리한 후, 여전히 유효한 build_job과 backup_task 세션만 남아 있음을 보여줍니다.

screen -wipe

screen -ls 명령어를 실행하여 최종 세션 목록 상태를 다시 확인합니다.
출력된 결과를 통해 종료된 zombie_task 세션이 깔끔하게 제거되었으며, 남은 2개의 세션만 안정적으로 유지되고 있음을 최종 검증할 수 있습니다.

screen -ls

스크롤백 버퍼 확장 및 screenrc 환경 설정

screen 사용자 환경 설정 파일을 준비하기 위해 touch ~/.screenrc 명령어를 실행합니다.

touch ~/.screenrc

터미널 스크롤백 버퍼 크기를 5,000줄로 늘려 이전 출력 로그가 잘리지 않도록 echo 'defscrollback 5000' >> ~/.screenrc 명령어를 실행합니다.

echo ‘defscrollback 5000’ » ~/.screenrc

화면 하단에 현재 창 번호와 이름, 호스트명을 상시 표시하는 상태바를 적용하기 위해 echo 'caption always "%{= kw}%-w%{= wk}%n %t%{-}%+w = %H"' >> ~/.screenrc 명령어를 실행합니다.

echo ‘caption always “%{= kw}%-w%{= wk}%n %t%{-}%+w = %H”’ » ~/.screenrc

tail -n 2 ~/.screenrc 명령어를 실행하여 앞서 추가한 환경 설정 항목이 정상적으로 저장되었는지 확인합니다.
출력된 결과를 통해 스크롤백 버퍼 확장 설정과 상태바 캡션 설정이 파일 끝에 올바르게 반영되었음을 검증할 수 있습니다.

tail -n 2 ~/.screenrc

지금까지 우분투에서 screen 명령어를 활용해 세션을 유지하고 백그라운드 작업을 관리하는 방법을 간단하게 살펴보았습니다.
장시간 소요되는 원격 작업 시 연결 끊김 걱정 없이 유용하게 활용해 보시기 바랍니다.