개요
Ubuntu 원격 서버 환경에서 SSH 연결이 끊겨도 작업이 중단되지 않도록 돕는 핵심 유틸리티인 screen의 실무 활용법을 알아봅니다. 세션 생성부터 백그라운드 작업 유지, 비정상 세션 복구 및 필수 환경 설정까지 자주 발생하는 문제 해결 패턴을 단계별로 안내합니다.
screen 설치 및 세션 생성과 목록 조회
screen 명령어 실습을 진행하기 위해 패키지 목록을 최신 상태로 갱신하고 screen 패키지를 설치합니다.

screen -version 명령어를 실행하여 설치된 screen 유틸리티의 버전 정보를 확인합니다.
출력된 결과를 통해 정상적으로 패키지가 설치되어 사용할 준비가 되었음을 확인할 수 있습니다.
⚙️ [주요 옵션]
-S : 생성할 세션의 이름을 사용자가 직접 지정합니다.-ls : 현재 실행 중인 모든 세션의 목록과 연결 상태를 조회합니다.-d : 접속 중인 세션을 화면에서 분리(Detach)하여 백그라운드로 전환합니다.-m : 세션을 강제로 새로 생성하며, 주로 백그라운드 작업 시작 시 사용합니다.-r : 백그라운드로 분리되어 있는 세션에 다시 접속(Attach)합니다.-wipe : 비정상적으로 종료되어 도달할 수 없는 세션 항목을 정리합니다.

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

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

백그라운드 작업 실행 및 상태 모니터링
백그라운드 작업의 로그를 저장할 실습 디렉터리와 초기 로그 파일을 생성하기 위해 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 -ls 명령어를 실행하여 현재 시스템에서 동작 중인 세션 목록을 확인합니다.
출력 결과를 통해 새로 생성된 build_job 세션과 기존의 backup_task 세션이 모두 백그라운드(Detached) 상태로 정상 유지되고 있음을 알 수 있습니다.

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

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

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

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

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

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

스크롤백 버퍼 확장 및 screenrc 환경 설정
screen 사용자 환경 설정 파일을 준비하기 위해 touch ~/.screenrc 명령어를 실행합니다.

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

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

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

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