つい忘れがちなので、foregroundからbackgroundへジョブを移すメモです。

centos7で確認済みです。


まず、こんな処理があったとします。

$ cat ./hogehoge.sh 
#!/bin/sh
while true; do echo "hogehoge" >> ./fugafuga.txt; sleep 1; done

これをssh経由でforegroundで実行してしまったが、background実行にして、sshを切りたい場合、

(実行)
$ ./hogehoge.sh 

(中断)
^Z       ※ここでCtr+z
[1]+  Stopped                 ./hogehoge.sh

(確認)
$ jobs
[1]+  Stopped                 ./hogehoge.sh

(バックグラウンドに切り替え)
$ bg 1
[1]+ ./hogehoge.sh &

(TTYから切り離す)
$ disown -h %1

とすることで、background実行になり、sshを切ってもジョブは残り続けます。

予め時間がかかるときは、以下のようにnohup(debian系ならstart-stop-daemonでもよし)を使って実行しておきましょう。

(命令が1つの場合)
$ nohup ./hogehoge.sh 1> ./success.txt 2> ./error.txt &

(命令が連結する場合)
$ nohup sh -c 'while true; do echo "hogehoge" >> ./fugafuga.txt; sleep 1; done' 1> ./success.txt 2> ./error.txt &

以上

コメントがあればどうぞ


CAPTCHA Image
Reload Image