ssh接続した先のサーバーで、ちょっと時間がかかるスクリプト( rsync
とか)を回した場合、実行中にネットワークが切れたりPCが落ちたりして「うわああああああ」ってなる経験をした方がいるかもしれません。そういった時に利用するのが screen
コマンドです。screenコマンドを使えばスクリプト実行中にサーバーからログアウトしても実行を続けてくれます。
screen コマンドの流れ
screen
コマンドで新しいscreenを作ります- そのscreenの中でスクリプトを実行します
- そのscreenから離れます。サーバーからログアウトしてもscreenの中でスクリプトが続きます。
- ある程度時間がたってスクリプトが終了することを確認するために、サーバーにsshして先程のscreenを開いてみる。
- 終わったらscreenを閉じる
例
まずはサーバーにsshして、 screen
でscreenを作成してみます。
$ ssh target-server [username@target-server ~]$ screen [username@target-server ~]$
screen
コマンドを打つとなんか画面が切り替わった感じがするはず。これで新しいscreenができました。ここで適当に時間が掛かりそうなスクリプトを実行したりします。
screenから抜けてサーバーからログアウトしてみます。screenから抜けるには Ctrl-a d
(Controlキーとaを同時押しした後にControlを離してd) または Ctrl-a Ctrl-d
です(Controlキーを押しながらaを押した後、Controlキーを押しながらd)。
[username@target-server ~]$ screen [detached] [username@target-server ~]$
[detached]
と表示されて元の画面に戻ってきたと思います。これで exit
とかしても、さきほどのscreenでスクリプトは実行されつづけます。今動いているscreenを見るには screen -ls
です。
[username@target-server ~]$ screen -ls There are screens on: 5689.pts-10.target-server(Detached) 1 Sockets in /var/run/screen/S-username
一つのscreenが動いていることがわかります。このscreenに戻るには screen -r <id>
です。idは 5689.pts-10.target-server
ですが、数字の部分だけでもいけます。
[username@target-server ~]$ screen -r 5689 # さっきの画面に戻る
screenを終了させるいは、この状態で(screenを開いた状態で)exitすればよいです。
[username@target-server ~]$ exit [screen is terminating] [yoshiyuki_sakamoto@nv-sysmanage01 ~]$
[screen is terminating]
と表示されて元の画面に戻ります。
screenは2つ以上作ることが可能です。
screenにいる時は、 Control + a がscreenコマンドに取られるのでemacsとか使っている人は注意しましょう。
まとめ
screenコマンドを使ってscreen上でスクリプトを実行すれば、時間のかかるスクリプトをsshして実行する時でも安心!