nohup
シェルはコマンドが呼び出される前|
など>
にメタ文字を解釈するため、パイプ記号の前で終了する引数。
提供されるコマンドラインは、nohupの標準出力(not mysqldump
)をの標準入力に向けgzip
ます。したがって、ログアウトすると、シェルおよびすべての子プロセスがハングアップ信号を受信します。nohup
信号がmysqldump
コマンドに到達するのを防ぎますが、gzip
コマンドはセッションを終了するときに閉じられている制御端末に接続されたままなので、コマンドは強制終了されます。
mnmncが示唆するようにコマンドをスクリプトに入れるか、新しいシェルを呼び出してパイプライン全体を実行できます。
nohup sh -c 'mysqldump -u user -ppass db | gzip > db.sql.gz' &
ここでnohup
は、単一のコマンドを呼び出しますsh
。標準出力はnohup.out
デフォルトでファイルに送られることに注意してください。ただし、標準出力をリダイレクトするため、このコマンドからの出力は期待できませんmysqldump
。
新たに生成されたシェルは、コマンドpipelineを呼び出しmysqldump | gzip
、標準出力をgzip
指定されたファイルにリダイレクトします。
ここで、呼び出されたコマンドの違いを見ることができます(これらの例のdd
代わりに使用mysqldump
):
$ nohup dd if=/dev/urandom bs=1M count=50 | gzip > /tmp/out.gz &
[1] 10721
nohup: ignoring input and redirecting stderr to stdout
$ jobs
[1] 10720 Running nohup dd if=/dev/urandom bs=1M count=50
10721 | gzip > /tmp/out.gz &
対
$ nohup sh -c 'dd if=/dev/urandom bs=1M count=50 | gzip > /tmp/out.gz' &
[1] 10792
nohup: ignoring input and appending output to ‘nohup.out’
$ jobs
[1] 10792 Running nohup sh -c 'dd if=/dev/urandom bs=1M count=50 | gzip > /tmp/out.gz' &
nohup
と、&
スクリプトでとしてスクリプトを起動nohup
して&
。たぶん、パテを閉じるとgzipが終了します。スクリプトの完全なコマンドの書き込みが失敗する場合-教えてください。