冲突描述
情景,配置为用appdef启动相关进程,将一个进程拆成两个进程后,在做压力测试的时候有问题,同一个容器里面,加载同一个.so文件或者多个在很小的概率上会有冲突,因为进程启动先后不受控制。
问题的解决
在一个容器中启动多个进程
1.用同一个脚本启动,入参为启动的进程名,脚本中判断入参个数若为多个则循环启动。
2.然后调用子脚本,逐一启动进程。
注意点
使用&标识符即可在bash脚本中达到setdaemon的效果。
代码逻辑如下
#!/usr/bin/env bash
set -euo pipefail
readonly process_num="$#"
readonly script_path="$(readlink -f "$0")"
readonly script_dir="${script_path%/*}"
myLogger="logger -t start_cxx.sh"
export LD_LIBRARY_PATH=/opt/xx/lib64/:$LD_LIBRARY_PATH
ldconfig
for ((i=1; i<=process_num; i++))
do
if [ $i -ne $process_num ]; then
${script_dir}/process_run.sh ${!i} &
else
${script_dir}/process_run.sh ${!i}
fi
done
拓展
1.
$?表示上一条命令执行结果
s hell脚本中,判断方法为上一条执行成功,则$?为0,执行失败,则为1
2.set -o pipefail表示最近前一条管道命令,若真整个管道每条命令都执行成功,则返回值为0,反之,则返回值为1。
3.set -u遇到未定义的变量,报错并立即退出,
所谓的没有定义的变量,比如说就是尝