2016年11月10日木曜日

ログアウトしても継続

sshでLinuxサーバにリモートログインし、
何かコマンドを実行するのはよくあることです。
しかしコマンドを実行してからやむを得ない事情で
ログアウトする必要に迫られることもまあまああります。

経験的にrootユーザで実行するとログアウト後も継続され、
一般ユーザだとバックグランドで実行していても
ログアウト時に強制終了されることを知っていたため、
長時間かかる処理の途中でログアウトすることが
最初から分かっている場合はrootで実行したりしていました。
しかし最近もっといい方法があることを知りました。
nohupコマンドです。

何がコマンドを実行する際に
$ nohup  <コマンド>
とします。
コマンドの実行時間を計るのに
$ time  <コマンド>
なんてやりますが、これと同じ書式です。
nohup付きで実行しているとログアウト(ターミナルを強制終了)しても
そのコマンドの実行が継続されます。
もちろん一般ユーザでも実行可能です。
コンソールに出力されるデータはカレントディレクトリの
"nohup.out"ファイルに書き込まれるのであとで確認することもできます。

また前もってログアウトするつもりなく
実行を開始した場合には別の手があります。
実行中(フォアグランド)のコマンドを
[Ctrl]+[z]キーで一時停止し、
$ jobs
でジョブ番号(普通は1)を確認した上で、
$ bg <ジョブ番号>
$ disown %<ジョブ番号>
を実行すればログアウト(ターミナルを強制終了)しても
実行が継続されます。
ただしコンソールに出力されるデータは喪失し、
実行結果を直接知ることもできません。
実行は計画的に、と言うことですね。

0 件のコメント:

コメントを投稿