なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Linuxで長いバッチ処理などを途中で永続化したい場合disownコマンドが使える

Linuxで長いバッチ処理などを途中で永続化したい場合disownコマンドが使える

コンソールで作業していて、バッチ処理を始めたのだけど終わらない…昼飯行けないやんけ…
みたいなことがあると思いますがLinuxbashのデフォルトコマンドで解決できそうです。

やり方

① 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 &