gpt4 book ai didi

environment-variables - 如何在Upstart脚本的启动前设置环境变量?

转载 作者:行者123 更新时间:2023-12-04 03:04:50 33 4
gpt4 key购买 nike

我们有一个自定义的C++守护程序应用程序,它可以 fork 一次。因此,我们一直在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`

还尝试在启动前执行此操作,但是env vars设置的exec节中没有任何值:
pre-start
NUM_CORES=32
end script

知道如何正确设置此NUM_CORES并仍然让Upstart跟踪为我们的应用进行一次 fork 的正确pid吗?

最佳答案

好尴尬推荐的方法是在启动前节中编写一个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变量,而且我不想重复重定向代码。

这仅适用于“”。 '命令是破折号中的内置命令,因此不会产生任何进程。

关于environment-variables - 如何在Upstart脚本的启动前设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610335/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com