新贵脚本。脚本节中的shell算法产生不正确的值。等效/ bin / sh脚本工作

时间:2015-11-24 11:42:05

标签: sh upstart

我有一个新手初始化脚本,但我的开发/测试/生产有不同数量的cpus / core。我想在init脚本中计算工作进程数为4 *核心数

新贵文档说script节使用/bin/sh语法。

我创建了/ bin / sh脚本来查看发生了什么。我的显着结果与我的upstart脚本不同。

我的upstart脚本中的

脚本节:

script
    # get the number of cores
    CORES=`lscpu | grep -v '#' | wc -l`
    # set the number of worker processes to 4 * num cores
    WORKERS=$(($CORES * 4))
    echo exec gunicorn -b localhost:8000 --workers $WORKERS tutalk_site.wsgi > tmp/gunicorn.txt
end script

输出: exec gunicorn -b localhost:8000 --workers 76 tutalk_site.wsgi

我的等效/ bin / sh脚本

#!/bin/sh

CORES=`lscpu -p | grep -v '#' | wc -l`
WORKERS=$(($CORES * 4))
echo exec gunicorn -b localhost:8000 --workers $WORKERS  tutalk_site.wsgi

输出: exec gunicorn -b localhost:8000 --workers 8 tutalk_site.wsgi

我希望这是一个相当简单的问题,其他一些眼睛会找到问题。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我想我几天前应该回答这个问题。我首先尝试使用环境变量,但没有任何运气。

我通过用python one-liner

替换计算解决了这个问题
WORKERS=$(python -c "import os; print os.sysconf('SC_NPROCESSORS_ONLN') * 2")

并且结果很好。

仍然很好奇为什么我的bourne-shell脚本提出了正确的值而新手脚本,其文档说使用bourne-shell语法没有