Zac*_*ach 10 upstart environment-variables
我们有一个自定义的C++守护程序应用程序,它只能分叉一次.所以我们一直在Ubuntu 12.04上的Upstart脚本中这样做,它完美地工作:
expect fork
exec /path/to/the/app
Run Code Online (Sandbox Code Playgroud)
但是现在我们需要向我们的app传递一个参数,该参数包含运行它的机器上的CPU数量:
cat /proc/cpuinfo | grep processor | wc -l
Run Code Online (Sandbox Code Playgroud)
我们的第一次尝试就是:
expect fork
exec /path/to/the/app -t `cat /proc/cpuinfo | grep processor | wc -l`
Run Code Online (Sandbox Code Playgroud)
而我们开始用正确的-t值的应用程序,新贵跟踪错误的PID值,我假设,因为这些猫,grep的&WC命令在EXEC所有启动过程中我们的应用程序之前.
我也试过这个,即使它不起作用,我想因为设置一个env var运行一个进程?Upstart仍然跟踪错误的pid:
expect fork
script
NUM_CORES=32
/path/to/the/app -t $NUM_CORES
end script
Run Code Online (Sandbox Code Playgroud)
我也试过在env节中这样做,但显然那些不运行命令:
env num_cores=`cat /proc/cpuinfo | grep processor | wc -l`
Run Code Online (Sandbox Code Playgroud)
也尝试在pre-start中执行此操作,但设置的env vars在exec节中没有任何值:
pre-start
NUM_CORES=32
end script
Run Code Online (Sandbox Code Playgroud)
知道如何正确设置这个NUM_CORES,并仍然让Upstart跟踪我们的应用程序一次分叉的正确pid吗?
mpm*_*mpm 17
这很尴尬.建议的方法是在pre-start节中编写一个env文件,然后在脚本节中获取它.我知道,这太荒谬了.
expect fork
pre-start script
exec >"/tmp/$UPSTART_JOB"
echo "NUM_CORES=$(cat /proc/cpuinfo | grep processor | wc -l)"
end script
script
. "/tmp/$UPSTART_JOB"
/path/to/app -t "$NUM_CORES"
end script
post-start script
rm -f "/tmp/$UPSTART_JOB"
end script
Run Code Online (Sandbox Code Playgroud)
我在预启动时使用exec行,因为我通常有多个env变量,我不想重复重定向代码.
这只适用于'.'命令是一个内置的短划线,因此没有生成任何进程.
| 归档时间: |
|
| 查看次数: |
12151 次 |
| 最近记录: |