私の仕事は、ログアウト時にすべてのセッションを破壊するように意図的に画面とtmuxを破ったようです(チケットを開いたときに彼らは応答しませんでした)。つまり、ctrl-Dを使用するか、ローカルコンピュータでターミナルエミュレータを閉じて再度ログインして[分離して]ログアウトすると、tmuxとscreenには別のセッションがありません。
1) この問題を解決する方法はありますか?
2)システムがログオフしたユーザーのすべてのバックグラウンドプロセスを終了した場合、予期せず切断されたセッションを回復することはできませんが、セッションの詳細をディスクに書き込むツールはありますか?たとえば、Emacsには何が含まれていますか?
まだどんな内容をお知らせするかわからないのでお問い合わせください。
答え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
私は2つの理由で意図的にtmuxinator設定からemacsを除外しました。 1 テキストエディタを使用すると、tmux が遅くなる可能性があり、あまりにも多くのテキストを更新するのが難しくなります。 2 Emacsをサーバーモードで実行したいのですが、tmuxで起動するとすでに実行されている可能性があります。私は通常、サーバーモードで実行されているemacs専用のクライアントとサーバー側の別々のウィンドウを実行します(もちろん同じ設定を使用)。また、クイック編集操作が呼び出される場所に関係なく、すぐにemacsサーバーに接続するようにEDITOR = "emacsclient -t"を設定しました。もちろん、これらのタスクはすべてemacsデスクトップの一部になります! (誰かが他の編集者と一緒にこれを行う方法を詳しく知りたい場合は興味があります。)