私たちのチームはサーバー構成を自動化するためにPallet(ClojureのPuppetを考えてみてください)を使用しましたが、かなり基本的な問題に直面しました。 PalletはターゲットVMから直接任意のスクリプトを実行できますが、スクリプトの1つがコマンドを実行すると問題が発生しました。実行されません。少なくとも私たちが設計する方法ではそうではありません。
私たちは&とscreenを使ってこれを試しましたが、後者は理想的ですが、両方は機能しません。たとえば、Palletにターゲット仮想マシンで次のスクリプトを実行させたいとします。
touch a
touch b &
touch c
私たちがリモートで見るのは、ファイルaとcが存在するということだけです。デフォルトスクリプトを実行するシェル(またはプロセスを意味しますか?)は、「touch b」の実行を拒否します。一方、同じホストで通常のターミナルセッションを使用してこのスクリプトを実行すると、正常に動作します。
もちろん、私たちはPalletの観点からこの問題にアプローチします。しかし、これが何も起こらない場合、シェルがどのような状況でバックグラウンドプロセスの実行を拒否しているのか誰かが教えてもらえますか?問題を解決する方法について手がかりを提供できますか?
私たちはCentOS 6.5 64ビットを使用していますが、これは関連性がないと思います。
答え1
努力する:
touch b & disown
親プロセスが終了したため、シグナルによって子プロセスが終了する可能性があります。help disown
婦人の役割を見るために使用されます。
nohup
同じことを行う別のプログラムがありますが、これはすべてのシェルで動作します。
nohup touch b