我们有一个自定义的 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 中启动所有进程。
我也试过这个,即使它不起作用,我猜是因为设置一个 env var 运行一个进程?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,并且仍然让 Upstart 跟踪我们的应用程序的正确 pid 一次分叉吗?