如何设置环境变量在新贵脚本提前启动?(How to set environment variable

2019-07-31 23:57发布

我们有一个自定义的C ++后台应用程序是叉一次。 因此,我们在我们的暴发户脚本在Ubuntu 12.04在做这和它完美的作品:

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值的应用程序,新贵跟踪错误的PID值,我假设,因为这些猫,grep的&WC命令在EXEC所有启动过程中我们的应用程序之前。

我也试过,甚至它不工作,我猜是因为设置了的环境变量运行的进程? 新贵尚跟踪错误的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`

也试过在提前启动这样做,但ENV乏设置有没有在EXEC节的任何值:

pre-start
    NUM_CORES=32
end script

任何想法如何得到这个NUM_CORES设置不当,仍然得到新贵追踪正确的PID为我们的应用程序,一旦叉?

Answer 1:

这是尴尬。 推荐的方法是写在启动前节的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

我使用的预启动的EXEC行,因为我通常有多个ENV变量,我不想重复重定向代码。

这只能是因为”。 '命令是一个内置于仪表板,因此没有进程产生。



Answer 2:

据zram-Config中的新贵配置:

script
    NUM_CORES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/')
    /path/to/the/app -t $NUM_CORES
end script


Answer 3:

我想补充

export NUM_CORES

在“脚本”分配一个值之后。 我记得,/ bin / sh的符号链接到非Bash shell中可以运行脚本,所以我会避免猛砸,只有构建。

回复:使用“ENV”节,它的字面传递值和使用shell约定不处理他们。



文章来源: How to set environment variable in pre-start in Upstart script?