재부팅 후 tmux 세션 복원


255

tmux 세션을 저장하는 방법이 있습니까? 즉, 컴퓨터를 재부팅하면 항상 세션이 손실됩니까?


1
대안으로 디스크를 최대 절전 모드로 전환 할 수 있습니다.
Mâtt Frëëman

36
최대 절전 모드는 컴퓨터를 재부팅하지 않고 지속적으로 실행하는 대안입니다.
chepner

5
@chepner : 그 때가 있습니다*** System restart required ***
karatedog

2
@karatedog 네, 그래서 우리는 최대 절전 모드가 재부팅시 tmux 세션을 잃는 해결책이 아니라는 것에 동의합니다.
chepner

답변:


170

예, 컴퓨터를 재부팅하면 세션이 손실됩니다. 세션을 저장할 수 없습니다. 그러나 스크립트를 작성할 수 있습니다. 실제로 가장 중요한 것은 일부 세션을 다시 작성하기 위해 스크립트를 작성하는 것입니다. 예를 들어, 세션을 생성하는 간단한 쉘 스크립트는 다음과 같습니다.

#!/bin/zsh                                                                                                   

SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null

if [ $? != 0 ] 
 then
    tmux new-session -s $SESSIONNAME -n script -d
    tmux send-keys -t $SESSIONNAME "~/bin/script" C-m 
fi

tmux attach -t $SESSIONNAME

이것이하는 일입니다. 먼저 tmux has-session 과 함께 해당 이름을 가진 세션이 있는지 확인합니다 (이 경우 원래 이름은 "script"임) . 리턴 코드를 확인합니다. 해당 이름의 진행중인 세션이 이미있는 경우 "if"주기를 건너 뛰고 세션에 연결된 마지막 줄로 바로 이동합니다. 그렇지 않으면 세션을 생성하고 일부 키를 세션에 보냅니다 (임의의 스크립트 만 실행). 그런 다음 "if"블록을 종료하고 연결합니다.

이것은 매우 간단한 샘플입니다. 연결하기 전에 여러 개의 창, 창 등을 만들 수 있습니다.

그러나 이것은 당신이 요구 한 것과 똑같지 는 않을 것입니다. 예를 들어 세션을 변경하면 창 이름을 바꾸고 새 창을 만드는 경우 재부팅하면 변경 사항이 저장되지 않습니다.

스크립팅 세션 프로세스를 용이하게하는 몇 가지 도구가 있지만 수동으로 작업하는 것을 선호합니다 (더 다재다능하다고 생각합니다). 이러한 도구는 TmuxinatorTeamocil 입니다.

나의 주요 정보원은 "The Pragmatic Bookshelf"Tmux입니다.


1
5 개의 파일이 열린 상태에서 세션을 복원하려는 경우 아무것도하지 않습니다. 그렇게 할 방법이 없습니까?
chovy

4
Tmux는 실행중인 프로세스 상태에 대해 아무것도 모릅니다. 'send-keys'또는 'split-window'명령을 'vim file1 file2 file3'으로 설정하거나 편집기의 세션 관리 (vim -S 등)를 살펴보면 동일한 파일이 열려 있는 스크립트를 작성할 수 있습니다.
bloy

tmux send-keys ...라인 의 목적은 무엇입니까 ?
Dominykas Mostauskis

2
@DominykasMostauskis이 명령 키 누름을 지정된 세션으로 보냅니다 . 세션에 들어가서 키보드에서 바로 그 키를 입력하는 것과 같습니다. 이 경우 "~ / bin / script"다음에 Enter를 보냅니다.
Dakatine

1
이 조합 some command; if [ $? != 0 ]; then .....은 다음과 같이 쓰기 쉽고 읽기 쉽습니다 if ! some command; then ......
fonini 2011

117

필자는 열린 tmux 세션, 창 및 현재 작업 디렉토리를 각각 유지 하는 간단한 bash 스크립트작성했습니다 .

cron에서 수동 또는 주기적으로 호출하십시오 (잊어 버릴 수 있기 때문에).

tmux-session save

에 쓸 것 ~/.tmux-session입니다. 재부팅 후 다음과 같이 복원하십시오.

tmux-session restore

수백 줄 길이의 Perl 스크립트보다 훨씬 낫습니다.


그래도 하나의 tmux 세션이있는 경우에만 해당됩니까?
Sevenearths

86

완전한 tmux 환경을 저장하고 나중에 복원 할 수있는 tmux 플러그인을 작성했습니다. 그것은 당신이 결코 TMUX를 종료하지 않는 느낌을 갖도록 정말로 자세하게 노력합니다.

https://github.com/tmux-plugins/tmux-resurrect

업데이트 : 이제 tmux 환경의 자동 백그라운드 저장을 수행 하는 tmux-continuum 플러그인이 있습니다. 선택적으로 컴퓨터 재부팅 후 tmux 환경을 * 자동으로 * 복원합니다.


"link"와 동일한 링크로 "answer"를 게시 한 것처럼 "do'h!" 플러그인이 무엇인지 기억하면서 이것을 발견했습니다.
phatskat

이 플러그인은 나쁘지 않지만 모든 프로그램을 복원하지는 못했습니다. 더 많은 문서를 읽고 github에 문제를 제출하십시오.
Arne

@Arne 프로그램에 따라 프로그램 체크 포인트가 필요할 수 있습니다. 대신, 영구 .vimrc 파일 및 vim의 커서 위치 등을 복원하도록 프로그램을 구성하고 다시 열 수있는 man과 같은 프로그램에 tmux pane_current_command를 저장하는 것이 좋습니다. Checkpointing은 제 의견으로는 매우 복잡하지만 어떤 경우에도 살펴볼 가치가 있습니다.
John P

@ bruno-sutic 플러그인 (tmux-resurrect)과 tmux-coninuum의 차이점은 무엇입니까?
lony


10

tmuxinator 는 Ruby로 작성된 도구로, tmux 세션을 쉽게 작성하고 관리하는 데 사용할 수 있습니다. 프로젝트를 만드는 데 사용할 수 있으며 나중에 tmux 세션으로 인스턴스화 할 수 있습니다.


5

여기에있는 이 부분 솔루션을 고려 하십시오.

작성자는 서버 재부팅 후 tmux 세션의 상태를 유지하기 위해 tmux 세션의 히스토리를 저장하는 기능을 작성합니다.


17
그들이하는 말을 게시 해 주시겠습니까? 링크가 썩을 수 있습니다.
cpast

1
@cpast : 이것은 사실이지만 주석도 썩을 수 있습니다. 둘 다주는 것이 가장
좋습니다

6
@greg 귀하의 링크는 404을 반환합니다
rofrol

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.