つい忘れがちなので、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 &
以上
コメントがあればどうぞ