読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】SSH が切れたら長い処理まで止まった。tmux と screen で端末を切り離すって何【LPICレベル1】

20レスカテゴリ:Linux
1: 名無しさん

サーバーに SSH して、1時間かかるバックアップを走らせてた
途中で Wi-Fi が切れて、戻ったら処理まで止まってた

2: 名無しさん

>>1
SSH が切れると、そのログインのシェルとそこから起動したプロセスに SIGHUP(回線が切れた合図)が送られて、ふつうは終了する
切れても続けたいなら、nohup で SIGHUP を無視させるか、tmux や screen の中で動かす

3: 名無しさん

>>2
nohup でええなら、tmux とか要らんやん

4: 名無しさん

>>3
nohup は「走らせっぱなし」にするだけで、あとから画面に戻って続きを見たり、キーを入力したりはできない
tmux と screen は、端末そのものをサーバー側で生かしておいて、あとでつなぎ直せる

5: 名無しさん

>>4
tmux の使い方は?

6: 名無しさん

>>5
tmux new -s backup で backup という名前のセッションを作って、その中でコマンドを動かす
切り離す(デタッチ)のは Ctrl+b を押してから d
一覧は tmux ls、戻る(アタッチ)のは tmux attach -t backup

7: 名無しさん

>>6
回線が切れたときも、自分でデタッチしたのと同じになるん?

8: 名無しさん

>>7
なる。セッションはサーバーで動き続けてるから、つなぎ直して tmux attach すれば、切れたときの画面のまま

9: 名無しさん

screen だとどうなるん

10: 名無しさん

>>9
screen -S backup で名前付きのセッション、デタッチは Ctrl+a を押してから d
一覧は screen -ls、戻るのは screen -r backup

11: 名無しさん

>>10
最初のキーが Ctrl+b と Ctrl+a で違うんか

12: 名無しさん

>>11
この最初のキー(プレフィックスキー)を押してから次のキーで操作する、というのは共通
ウィンドウを増やすのは tmux で Ctrl+b c、screen で Ctrl+a c

13: 名無しさん

>>12
それなら、どっちか1つ覚えれば十分やろ。両方覚える意味ある?

14: 名無しさん

>>13
ふだん使うのは1つでいい。でも入ってるサーバーがどっちかは環境しだいで、試験の範囲(103.5)にも両方の名前が入ってる
デタッチ・一覧・アタッチの3つを、両方で言えるようにしておくと困らない

15: 名無しさん

tmux の中で画面を分けることもできるんやろ

16: 名無しさん

>>15
できる。Ctrl+b % で左右、Ctrl+b " で上下に分ける
左でログを tail -f しながら、右で作業する、みたいな使い方ができる

17: 名無しさん

セッションを終わらせるには?

18: 名無しさん

>>17
中のシェルで exit するか、tmux なら外から tmux kill-session -t backup
デタッチしたまま忘れると、ずっと残る。tmux ls でときどき確かめる

19: 名無しさん

>>1
もう走らせてしまったコマンドを、あとから tmux に移すことはできる?

20: 名無しさん

>>19
tmux と screen には、動いてるプロセスを取り込む機能はない
bash なら、Ctrl+z で止めて bg で裏に回し、disown でシェルの管理から外すと、ログアウトしても SIGHUP が送られなくなる。画面に戻ることはできないから、最初から tmux の中で動かすのが確実

管理人のひとこと