一度フォークするカスタム C++ デーモン アプリケーションがあります。そのため、Ubuntu 12.04 の Upstart スクリプトでこれを実行しており、完全に機能します。
expect fork
exec /path/to/the/app
ただし、アプリが実行されるマシンの CPU の数を含む引数をアプリに渡す必要があります。
cat /proc/cpuinfo | grep processor | wc -l
私たちの最初の試みはこれでした:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
それは正しい -t 値でアプリを起動しますが、Upstart は間違った pid 値を追跡します。これらの cat、grep、wc コマンドはすべて、アプリの前に exec でプロセスを起動するためだと思います。
私もこれを試しましたが、うまくいかないのは、環境変数を設定するとプロセスが実行されるためだと思いますか? Upstart はまだ間違った pid を追跡しています:
expect fork
script
NUM_CORES=32
/path/to/the/app -t $NUM_CORES
end script
また、env スタンザでこれを実行しようとしましたが、明らかにそれらはコマンドを実行しません。
env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`
また、開始前にこれを実行しようとしましたが、そこに設定された環境変数には、execスタンザに値がありません:
pre-start
NUM_CORES=32
end script
この NUM_CORES を適切に設定し、一度フォークしたアプリの正しい pid を Upstart に追跡させる方法はありますか?