冲突描述
情景,配置为用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遇到未定义的变量,报错并立即退出,
所谓的没有定义的变量,比如说就是尝

在进行压力测试时,同一容器内的进程加载相同动态链接库可能导致冲突。解决方案包括通过bash脚本循环启动进程,并利用&实现守护进程效果。在脚本中,可以使用$?检查命令执行状态,set -o pipefail关注管道命令成功率,set -u避免使用未定义变量,set -e确保命令失败时脚本能正确退出。

2520

被折叠的 条评论
为什么被折叠?



