nohup와 tmux 사용하기
ssh
로 접속하여 실행시킨 process들의 경우, 해당 접속 터미널 하나에 할당된 하나의 session
에 속하게 된다.
Process
: 현재 실행 중인 프로그램. 각각 실행되는 프로그램을 위한 독립된 메모리 영역(stack, heap, data, code등으로 구성)을 할당받음.Session
: user가 접속하여 작업하는 terminal 단위로 process 그룹들을 묶은 일종의 그룹.
문제는 ssh
가 종료되거나 갑자기 연결이 끊기는 경우, linux서버는 해당 ssh에 해당하는 session에 속하던 process들을 모두 종료시킨다.
session
종료된 경우,
해당 session의 joblist의
background process들도 종료된다
(zsh의 경우).
터미널 종료이후에도 process수행하기
ssh
등의 원격 접속으로 특정 process를 수행시키고, 해당 접속을 끊은 이후에도 동작을 하게 하려면 다음 방법 중 하나로 수행되어야 함.
- 해당
procss
를daemon
으로 만들어 실행시키거나 nohup
(no hangup)으로 수행(동시에 백그라운드로 수행)시켜
Terminal이 종료되는 HUP signal을 무시하도록 하여 접속 종료 이후에도 실행되도록 하거나,- 백그라운드(
&
)로 수행을 시킨 후disown
명령어로
해당 프로세스를 현재session
의 리스트에서 제거하여
해당 터미널이 종료할 때 같이 종료되지 않도록 수행. tmux
(terminal mutiplexer)를 이용하여 해당 process를 수행한다.
일반적으로 ssh
로 특정 서버 프로그램 등을 수행할 경우라면 nohup
을 사용하는 것이 편하다.
만약 ssh
접속이 wifi등과 같이 불안한 경우라면 tmux를 이용하는 것이 가장 쉽다.
daemon으로 수행시키는 것이 서버프로그램을 수행시키는 정석이나,
테스트 용이나 단일성의 작업인 경우엔 nohup
가 낫다.
disown
을 이용하는 경우와 nohup
은 비슷한 용도로 사용 가능한데 개인적으로 nohup
만 쓰는터라...
단순히 background로만 변경하는 경우는
현재 bash에서는 terminal 종료 이후에도 수행되나,
(shopt | grep huponexit
로 확인할 경우huponexit off
라고 나옴)
zsh에선 처음부터nohup
로 수행시키거나disown
으로 session과 관련된job
리스트에서 제거해야함.
nohup
사용하기.
nohup [target_process_or_target_sh] &
target_process
target_sh
를 hangup 시그널이 와도 종료되지 않도록 수행함.nohup
로 수행될 프로세스나 셀은 permission이 755 이상이어야 함.&
를 끝에 추가하여 background로 수행되도록 하는게 일반적.
위와 같이 수행된 process나 sh파일의 stdout
으로의 출력은 nohup.out
파일에 쓰여짐.
다음을 통해 stdout
과 stderr
를 달리 지정한 파일에 쓰여지도록 하는 경우가 많음.
nohup [target_process_or_traget_sh] > test.log 2>&1 &
tmux (terminal multiplex)사용하기.
ssh
로 접속하고 tmux
를 수행하고 나면,
tmux
가상터미널이 수행되면서 session
이 생성되고
해당 가상터미널 session
에서 수행된 process
들은 ssh
접속이 끝나더라도 종료되지 않음.
이후 다시 접속하고나서 tmux attach -t [대상 session]
를 수행하면
끊기기 전 session
의 process
들이 죽지않고 유지되고 있기 때문에
그대로 이전 상태에서 이어서 작업이 가능함.
tmux ls
:- 현재 수행되고 있는
session
들의 리스트를 보여줌 - session number 와 session name 이 보여짐.
- 현재 수행되고 있는
tmux new -t [생성할session의 name]
:tmux
로만 수행하면 session number로session
이 생성되지만,- 이 방식으로 수행하면 name을 지정하여 생성하게 된다.
tmux kill-session -t [종료할 session의 name or 번호]
:- 특정
session
을 강제 종료시킴.
- 특정
tmux attach -t [다시 연결할 session의 name or 번호]
:- 해당
session
에 다시 접속 (attach)
- 해당
ctrl
+b
+d
:tmux
의session
에서 수행하면- 해당
session
에서d
(dettach)된다.(tmux attach
의 반대)
접속이 불안한 환경에서 작업을 한다면
ssh
로 접속하고 나서 tmux
를 수행하여 작업을 하는게 좋고,
이후 끊기다면 tmux attach
를 수행하여 이어서 작업을 하면 된다.
읽어보면 좋은 자료들
https://velog.io/@ur-luella/tmux-사용법
https://m31phy.tistory.com/226
https://www.devkuma.com/docs/linux/nohup/
'Linux' 카테고리의 다른 글
[Linux] 한글 처리 : Ubuntu (1) | 2023.10.01 |
---|---|
[Linux] 파일 내용확인하기: cat, bat, less, more, head, tail (0) | 2023.09.30 |
[Linux] Pipe(|)와 다중 명령어 (;, &&, ||) (0) | 2023.09.12 |
[zsh] install zsh and oh-my-zsh (0) | 2023.09.11 |
[Tip] 특정 문구가 있는 process들을 모두 kill (0) | 2023.09.08 |