Linuxで長いバッチ処理などを途中で永続化したい場合disownコマンドが使える
コンソールで作業していて、バッチ処理を始めたのだけど終わらない…昼飯行けないやんけ…
みたいなことがあると思いますがLinuxのbashのデフォルトコマンドで解決できそうです。
やり方
① ctrl+z で実行中の処理を一時停止する
② ジョブの状態を確認(ジョブはプロセスとは違う)
$ jobs
[1]+ 停止 <...なんか起動してたプロセスが表示される...>③ bgコマンドで上記プロセスをバックグラウンドで再開させる(→ &を付与してバックグラウンドで実行される)
$ bg 1④ disownコマンドで上記ジョブを永続化する(HUPシグナルを無視させる)
jobspec は %1 のようにジョブ番号を指定します。②で出した番号と同じ。
$ disown -h [jobspec]
psコマンドでプロセスが起動し続けていることを確認。SSHを抜けても起動し続けているはず。
最初からnohupをつけて処理を永続化する
// 標準出力のみログに残す場合
$ nohup command > out.log &
or// 標準出力と標準エラー出力をログに残す場合
$ nohup command 2>&1> out.log &