개요
때때로 SSH를 이용하여 라즈베리파이에 접속 후, 프로그램을 실행하다 보면 장시간 구동이 필요한 경우가 있습니다. 하지만 어떤 사유로 SSH 세션이 갑자기 종료되면 동작중이던 프로그램도 함께 종료되고 작업 중이던 내용도 함께 잃게 됩니다.
다행히 Screen이라는 GNU의 유틸리티를 사용하면 이러한 상황을 예방할 수 있습니다.
설치
라즈베리파이에 Screen이 설치되어 있지 않은 경우, 다음 명령을 사용하여 Screen을 설치할 수 있습니다.
$ sudo apt install screen
$ screen -v
Screen version 4.05.00 (GNU) 10-Dec-16
Screen 사용
Screen 실행
Screen세션을 하나 실행하려면 간단히 아래의 명령어를 터미널에 입력합니다.
$ screen
Screen 세션을 실행하면 쉘이 포함된 윈도우 하나가 생성됩니다.
Screen 상태 확인
$ screen -ls
There is a screen on:
2246.pts-0.raspberrypi (2019년 11월 16일 17시 19분 46초) (Attached)
1 Sockets in /run/screen/S-pi.
자신이 현재 Screen 의 2246 세션에 속해 있음을 확인
장시간 구동 프로그램 실행
$ a.out
Hello World
Screen 분리 (detach)
현재 실행 중인 Screen 세션에서 필요한 작업을 실행한 후, 언제든지 아래의 명령을 사용해 사용 중인 세션에서 분리할 수 있습니다.
Ctrl+a
d
Screen 상태 확인
세션에서 분리된 후에도 Screen 내에서 여러분이 동작시킨 프로그램은 중지되지 않고 계속 실행될 것 입니다. 이를 확인하려면 다음과 같이 입력합니다.
※ Ctrl+a
d
를 사용한 Screen 분리 외에도 SSH 연결이 갑작스럽게 끊어지는 상황에서도 Screen 세션 내에서 여러분이 동작시킨 프로그램이 중단되지 않을 것입니다.
$ screen -ls
There is a screen on:
2246.pts-0.raspberrypi (2019년 11월 16일 17시 19분 46초) (Detached)
1 Sockets in /run/screen/S-pi.
Screen의 2246 세션이 실행 중이지만 자신은 Screen에서 분리되어 있음 (Detached)을 확인할 수 있습니다.
스크린에 재접속 (re attach)
Screen 세션에 다시 접속하려면 아래의 명령을 입력합니다.
$ screen -r
만약 하나 이상의 Screen 세션을 사용하여 작업중이었던 경우라면 r
항목 뒤에 세션 식별자를 추가하여 어떠한 세션에 접속할 것인지 지정할 수 있습니다.
현재 동작중인 스크린 세션의 식별자는 다음 명령으로 확인할 수 있습니다.
$ screen -ls
There are screens on:
2563.pts-0.raspberrypi (2019년 11월 16일 17시 33분 43초) (Detached)
2246.pts-0.raspberrypi (2019년 11월 16일 17시 19분 46초) (Detached)
2 Sockets in /run/screen/S-pi.
만약 여러분이 2246.pts-0 에서 작업을 재개하고 싶은 경우는 다음과 같이 프로세스 ID 값을 추가로 입력합니다.
$ screen -r 2246
스크린 종료
앞서 실행하였던 장시간 구동이 필요한 프로그램이 완료 된 경우 다음 명령을 사용하여 해당 스크린을 종료할 수 있습니다.
$ exit
[screen is terminating]
$
기타
SSH 에서 접속하며 작업 이어서 하기
$ ssh -t pi@192.168.0.3 screen -r 2246
마우스 휠을 포함한 화면 스크롤 동작하지 않음
다음과 같이~/.screenrc
파일을 생성하고 아래의 내용을 추가하여 해결합니다.
termcapinfo xterm* ti@:te@
혹은 "scrollback mode"로 전환합니다.
Ctrl+a
Esc
또는
Ctrl+a
[
bash script에서 사용하기
시스템의 시작 스크립에서 사용할 경우 Screen을 Detached 모드로 실행할 수 있습니다.
$ screen -d -m -S Play bash -c "cd $HOME/app4gj && node mp3.js"
※ -d -m
: Screen을 Detached 모드로 실행하며 실행 시 Attach않습니다.
화면의 내용 파일에 남기기
화면에 출력되는 내용을 파일에 기록하고자 하는 경우도 있습니다. 이경우 -L
옵션을 사용하면 화면에 출력하였던 내용이 파일에 남습니다. 만약 -Logfile 옵션을 사용하여 별도로 로그를 기록할 파일명을 입력하지 않는다면 screen.%n
파일에 로그가 기록됩니다.
$ screen -d -m -L -Logfile log.txt -S Play bash -c "cd $HOME/app4gj && node mp3.js"
기타 - Screen 윈도우 관리
Screen 세션을 실행하면 쉘이 포함된 윈도우 하나가 생성됩니다. 필요에 따라서 Screen 세션 내에서 여러 개의 윈도우를 생성할 수도 있습니다.
새로운 쉘을 생성하려면 Ctrl+a
, c
를 입력합니다.
이 외에도 Screen의 윈도우 관리를 위해 일반적으로 사용되는 명령은 다음과 같습니다. (대/소문자 사용에 주의합니다.)
Ctrl+a
c
새로운 윈도우를 생성합니다.Ctrl+a
"
생성된 윈도우의 목록을 나열합니다.Ctrl+a
0
윈도우 0으로 전환합니다.(0~9 사용가능)Ctrl+a
A
현재 윈도우의 이름을 변경합니다. (대문자 A를 사용합니다.)Ctrl+a
S
현재 영역을 수평으로 이등분합니다.Ctrl+a
|
현재 영역을 수직으로 이등분합니다.Ctrl+a
tab
영역을 다음으로 이동합니다.Ctrl+a
Ctrl+a
현재 영역과 이전 영역사이를 오갑니다.Ctrl+a
Q
현재 영역을 제외한 모든 영역을 닫습니다.Ctrl+a
X
현재 영역을 닫습니다.
참고
'라즈베리파이 > 기초' 카테고리의 다른 글
키 기반 SSH 연결 (0) | 2019.12.28 |
---|---|
라즈베리파이 IP 고정하기 (0) | 2019.12.09 |
라즈베리 파이와 블루투스 장치(스피커) 연결하기 (0) | 2019.06.19 |
라즈베리파이 블루투스 스택(bluez) 업그레이드 (0) | 2019.06.19 |
라즈베리파이 USB 포트 출력전류 설정 (0) | 2019.05.18 |