起进程加载动态链接库冲突解决方案
程序员文章站
2022-05-28 11:16:23
...
冲突描述
情景,配置为用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_cplane.sh"
export LD_LIBRARY_PATH=/opt/nokia/lib64/:$LD_LIBRARY_PATH
ldconfig
for ((i=1; i<=process_num; i++))
do
if [ $i -ne $process_num ]; then
${script_dir}/cplane_process_run.sh ${!i} &
else
${script_dir}/cplane_process_run.sh ${!i}
fi
done
拓展
1.
$?表示上一条命令执行结果
s hell脚本中,判断方法为上一条执行成功,则$?为0,执行失败,则为1
2.set -o pipefail表示最近前一条管道命令,若真整个管道每条命令都执行成功,则返回值为0,反之,则返回值为1。
3.set -u遇到未定义的变量,报错并立即退出,
所谓的没有定义的变量,比如说就是尝试获取命令的第一个参数,然而并没有参数传入。
4.set -e: 当一个命令失败时,立即退出。如果你不想立即退出则可用‘|| true’
例子
#!/bin/bash
# there is no a.test,but have b.test
#set -E
#trap "echo ERR trap fired!" ERR
set -u
echo ${1}
set -o pipefail
cat a.test
echo $?
cat b.txt
echo $?
cat a.txt | echo "world"
echo $?
cat b.txt | echo "hi"
echo hello
echo $?
ref: https://blog.csdn.net/solinger/article/details/85317712
推荐阅读