DDD tactical components
linux에서 batch 작업을 돌릴 때,
background에서 작업을 실행할 때, 등 screen을 사용한다.
보통 local linux 보다는 ssh로 원격 서버에 들어갈 때 사용한다.
- local에서는 그냥 터미널 하나 더 띄우면 되니깐..
원격에서는 terminal session이 끊길수도 있고, screen으로 작업을 돌리는게 자업 내역 관리에도 좋은 것 같다.
screen으로 창 분할 등으로도 쓰긴 하는데,
나는 창 분할은 잘 안쓰게 되더라.
screen listup
screen -list
screen -ls
screen list를 볼 수 있다.
detach/attach 정보, screen 생성 시간, sessionId 도 확인할 수 있다.
screen start as name
screen -S {name}
-S
option을 주면 해당 name으로 screen을 생성하고 attach(진입)할 수 있다.
이미 있는 이름으로 생성하더라도 새로운 session을 만들어주는데, 이는 sessionId가 다르기 때문에 다른 id 이다.
ls
로 확인하면 같은 name, 다른 id의 screen list를 확인할 수 있다.
enter screen
screen -r {name}
attach하고 detach해서 나온 screen을 다시 들어갈 때 사용한다.
name으로 들어가거나 sessionId로 들어갈 수 있고, 같은 name이 여러 개면 sessionId를 명시해야 한다.
enter screen
screen -x {name}
요게 좀 중요하고, 혼자서 쓰면 -r
option이랑 거의 다를 바가 없는 부분이다.
-x
option은 screen이 attach 상태(다른 사람/다른 terminal)에서 접속해 있어도 들어갈 수 있다.
-r
option은 attach이면 들어갈 수 없음.
그리고 session이 공유되어, 여러명이 작업할 때 터미널을 공유해서 볼 수 있다.
- 이건 terminal을 두 개 띄워두고 같은 session에 두 option을 모두 사용해보면 한 번에 이해할 수 있다.
screen 나오기 (detach)
ctrl + a d
screen에 접속해있으면 attach라고 하고, 나오면 detach라고 한다.
detach로 나오는건 screen session은 살아있고 화면만 나오는 것이다.
screen에서 작업을 실행하고 나올 때, 이걸 제일 많이 쓴다.
kill screen
screen -X -S {name} kill
하나의 session 죽이기.
session을 exit
하지 않고 detach 해서 나오면 screen에서 작업이 끝났더라도 session이 살아있다.
이걸 죽이는데 사용한다.
이것도 동일한 name이 여러 개라면 sessionId를 명시한다.
kill all screen
killall screen
pkill screen
session을 모두 죽일 때 사용한다.
업무에서 session을 여러 개 활용하기도 하는 편인데, (job1 / job2 / monitoring …)
안쓰는 session이 많아 이걸 사용했다가 불편했던 적이 있다.
실수하기도 쉽고 개인적으로는 안쓰는게 좋은 것 같다.
kill 특정 name들
screen -ls | grep Detached|grep {name}|cut -d. -f1|awk '{print $1}' | xargs kill
작업을 하다보면 동일한 name의 여러 session들이 생기기 쉽다.
나 같은 경우는 migration 작업에서 screen -S mig
와 같이 여러번 돌리는 경우가 있는데,
이럴 때 session이 쌓인걸 정리할 때 사용한다.