SSHでサーバーに接続して「処理に時間のかかるバッチ」を実行するとき、SSHの接続が切れても実行プロセスを起動させ続ける方法を紹介します。「nohupを利用した方法」と「tmuxを利用した方法」を取り上げます。
目次
動作確認用バッチ
batch.sh というファイルを作成して、以下処理を記述します。
#!/bin/bash
for i in `seq 1 1000`
do
echo ${i}
sleep 1
doneこのバッチファイルで動作確認します。
nohup コマンド &
端末が閉じられたとき、端末で起動したプロセスに SIGHUP のシグナル(ハングアップを知らせるシグナル)が送信されます。
プロセスはSIGHUPのシグナルを受信すると、デフォルトで処理を終了します。
nohup経由でコマンドを実行することで SIGHUP を無視するようになります。
バックグラウンドで実行させるため & も最後につけます。
$ nohup ./batch.sh &
[1] 68372
appending output to nohup.out
$
$
$ cat nohup.out
1
2
3
4
5
6実行プロセスの標準出力・標準エラー出力は nohup.out に書き込まれます。
tmux
tmuxをインストール
サーバー(ubuntu)にtmuxをインストールします。
apt-get update
apt install -y tmuxtmuxでプロセスを起動
セッションを開始します。
$ tmux new -s test-session1tmuxのセッションの中でバッチを実行します。

バッチを実行したら、セッションをデタッチします。
デタッチするには、まず Ctrl+b を押します。 次に d を押すとデタッチされます。
再度セッションに接続してみます。まず、現在起動してるセッションを確認します。
$ tmux ls
test-session1: 1 windows (created Fri Jul 27 14:30:25 2018)セッション名を指定して、再度セッションに接続します。
$ tmux attach -t test-session1下記のように、バッチの実行が継続しています。

tmuxの主な操作
| コマンド | 説明 |
|---|---|
| tmux | セッションを作成 |
| tmux new -s <セッション名> | 名前付きでセッションを作成 |
| tmux ls | セッション一覧を確認 |
| tmux attach -t <セッション名> | 指定セッションにアタッチ |
| tmux kill-session -t <セッション名> | 指定セッションを終了 |
| キー操作 | 説明 |
|---|---|
Ctrl+b を押した後に d を押す | セッションをデタッチ |
Ctrl+b を押した後に ? を押す | キーバインド一覧表示 |
以下、キーバインド一覧表示した時の画面です。
