내 작업은 로그아웃 시 모든 세션을 파괴하도록 의도적으로 화면과 tmux를 깨뜨린 것 같습니다(티켓을 열었을 때 그들은 응답하지 않았습니다). 즉, ctrl-D를 사용하거나 로컬 컴퓨터에서 터미널 에뮬레이터를 닫고 다시 로그인하여 [분리하고] 로그아웃하면 tmux와 screen에 더 이상 분리된 세션이 없습니다.
1) 이 문제를 해결할 수 있는 방법이 있나요?
2) 시스템이 로그오프한 사용자에 대한 모든 백그라운드 프로세스를 종료하는 경우 예기치 않게 연결이 끊어진 세션을 복구할 수는 없지만 세션 세부 정보를 디스크에 쓸 수 있는 도구가 있습니까? 예를 들어 이맥스에는 무엇이 들어있나요?
아직 어떤 내용을 알려드릴지 모르니 문의해 주세요.
답변1
달리는 것 외에emacs -nw
통과 ssh
(그리고 저장그것은세션), 이 작업을 수행할 수 있는 도구가 거의 없기 때문에 옵션이 거의 또는 전혀 없습니다(이 작업을 수행하려는 시도가 종종 이상한 GUI 데스크탑 제외).
귀하의 "직업"이 유휴 세션을 종료하려고 하므로 해당 세션도 제한되거나 제거될 수 있습니다 cron
.
시도해 볼 수는 있지만 nohup
일반적으로 체크아웃을 당하고 죽게 됩니다. 유능한 시스템 관리자라면 누구나 사용할 수 있는 해결 방법을 이미 갖고 있을 것입니다.
답변2
이 문제에 대한 해결책이 있습니다:모쉬!
Mosh는 TCP 대신 UDP를 사용하며 클라이언트가 IP 주소를 변경하고 다른 위치에서 또는 TCP 연결을 중단할 수 있는 이벤트 이후에 세션을 계속할 수 있도록 합니다. 또한 연결이 끊어진 동안 업데이트를 놓친 경우 서버가 클라이언트를 최신 상태로 유지하기 위해 필요한 화면 업데이트를 보낼 수 있도록 서버의 화면 내용(유사 screen
및 실제)을 추적합니다.tmux
Mosh는 처음에 SSH를 사용하여 로그인하고 세션을 설정했지만 나중에는 자체 UDP 프로토콜을 사용했습니다.
답변3
@Thomas Dickey와 @Celada는 둘 다 훌륭한 제안을 갖고 있으며 며칠간의 연구 끝에 관심을 가질만한 좋은 솔루션을 얻었습니다.
첫째: 물론 사용해야 합니다.모쉬서버 측에서 사용 가능한 경우. 이를 통해 불량/느린 연결을 처리할 수 있습니다.
둘째, 작업 내용을 데스크탑에 저장할 수 있는 편집기를 사용하십시오. 예를 들어 emacs에는 편집기가 있습니다. ~에 따르면문서및 변수는 Emacs 24.4에서 desktop-auto-save-timeout
init 파일에 사용될 때 기본적으로 30초마다 자동 저장됩니다. (desktop-save-mode 1)
emacs는 데스크탑 파일을 잠글 수 있으므로 충돌 후 emacs를 다시 시작하면 이 작업이 성공적으로 수행되지 않습니다 (desktop-read)
. 일부 코드는 다음에서 유래합니다.여기도움이 되었습니다(하지만 어떻게 작동하는지 모르겠습니다). 초기화 파일에 다음을 추가하세요.
;;; desktop-override-stale-locks.el begins here
(defun emacs-process-p (pid)
"If pid is the process ID of an emacs process, return t, else nil.
Also returns nil if pid is nil."
(when pid
(let ((attributes (process-attributes pid)) (cmd))
(dolist (attr attributes)
(if (string= "comm" (car attr))
(setq cmd (cdr attr))))
(if (and cmd (or (string= "emacs" cmd) (string= "emacs.exe" cmd))) t))))
(defadvice desktop-owner (after pry-from-cold-dead-hands activate)
"Don't allow dead emacsen to own the desktop file."
(when (not (emacs-process-p ad-return-value))
(setq ad-return-value nil)))
;;; desktop-override-stale-locks.el ends here
나는 tmux를 사용한다tmuxator 고객SSH를 통해 내 작업 디렉토리에 연결되는 일부 창/창이 열립니다.서비스 터미널. 완벽하지는 않지만, htop
내가 가장 좋아하는 쉘을 사용하여 다양한 오픈 디렉토리의 인스턴스로 작업 환경을 설정하는 데는 여전히 꽤 효과적입니다. 내 tmux 구성 파일에 몇 가지 유용한 내용이 있습니다.
# make sure your terminal emulator and tmux are on the same colour scheme, or your nice themes will get screwed up.
set -g default-terminal "xterm-256color"
#if you use vim in tmux you need this for quick ESC key sequences, else it gobbles up ESC key presses.
set -s escape-time 0
# Enable mouse mode (tmux 2.1 and above)
set -g mouse on
# don't rename windows automatically. useful for window "categories"
set-option -g allow-rename off
# switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
그리고 내 tmuxinator yml 구성 파일의 일부
windows:
- ouput: # this is the name of a window
layout: tiled
panes: # these are some panes in said window
- cd /some/directory
- cd /another/directory
- cd ~/
- cd ~/
- remoutput:
layout: tiled
panes:
# cd to working dir and start up a zsh session
- ssh me@host -t 'cd ~/working/dir; zsh -i'
# repeat more panes and windows server-side
ssh를 사용하여 tmux 창의 연결을 끊은 후 이전 명령이 tmux 주석이었던 로컬 셸로 종료하므로 최소한 서버로 up+RET하는 것은 쉽습니다. 효과적인지 확인하려면 환경에서 "델타 기록 공유" 옵션을 사용하지 않아야 합니다.
마지막으로, 시스템이 유휴 세션을 종료하기로 결정한 경우 클라이언트가 매분마다 SSH Poke를 보내 유휴 상태임을 인식하지 못하도록 하십시오. .ssh/config에서 이 작업을 수행하세요.
Host *
ServerAliveInterval 60
나는 두 가지 이유로 의도적으로 tmuxinator 구성에서 emacs를 제외했습니다. 1 텍스트 편집기를 사용하면 tmux가 느려질 수 있고 너무 많은 텍스트를 새로 고치기가 어렵습니다. 2 Emacs를 서버 모드에서 실행하고 싶은데 tmux에서 시작할 때 이미 실행 중일 수 있습니다. 나는 일반적으로 서버 모드에서 실행되는 emacs 전용의 클라이언트 및 서버 측 별도의 창을 실행합니다(물론 동일한 구성 사용). 또한 빠른 편집 작업이 호출되는 위치에 관계없이 즉시 emacs 서버에 연결되도록 EDITOR="emacsclient -t"를 설정했습니다. 물론, 이러한 모든 작업은 emacs 데스크탑의 일부가 됩니다! (누군가 다른 편집자들과 함께 이 작업을 수행하는 방법을 자세히 알고 싶다면 관심을 가질 것입니다.)