记三回bash shell编写制定

记一次bash shell编写

本子内容如下: 指标是监测mongo的接连数 达到自然的连接数后,重启。
#!/bin/bash
#source /etc/profile
conn=`/usr/bin/mongo –quiet << EOF
db.serverStatus().connections
exit
EOF
`
conn1=${conn#*:}
curr=${conn1%,*}
#PID=$(ps -ef|grep “mongodb”|grep -v grep|awk ‘{print $2}’)
echo “$curr”
if [ $curr -le 5800 ]
then
echo “it’s ok “
else
echo “the connect count is too big,it will be restart”
for PID in $(ps -ef|grep “maxConns”|grep -v grep|awk ‘{print $2}’)
do
echo “$PID”
kill -9 $PID
done
echo “the process is killed”
nohup numactl –interleave=all /usr/local/mongodb/bin/mongod
–dbpath=/home/mongo/mongodb/data/ –log
path=/home/mongo/mongodb/logs/mongodb.log –maxConns=6000 –logappend
&>/dev/null &
echo “restart ok”
fi
遇上标题1 :conn=`/usr/bin/mongo –quiet << EOF 正是这一句,
在bash 中引用命令结果 一般用 “或是$()
那句中感到扩充了EOF 景况变的不平等了,刚开首自己把`或) 放到
甘休的EOF前面,总是提醒语法错误 。
于是另起一行 `或 ) 则成功了
相遇标题2:命令脚本 手动推行没万分 放到crontab里 就无法奏效实践。
在网络查了写质感,有说或许是情状变量的震慑,于是加了source /etc/profile
也加过source ~/.bash_profile
但是都没生效。 因为在创立crontab的时候扩充了重定向日志
,观看了日记下日志 发现延续卡在 输出it will be restart
在用ps查看进度 开采经过未有了 不过未有重启mongo。刚开始感到是在bash
中用nohup & 的缘由 导致脚本会一贯
停留在相当地点,可是怎么改也故障依然。 于是本身在kill -9 $PID在此以前 加了echo
展现pid ,发现pid 会有处处多少个
于是乎加了个for循环 。后来意识不对啊 kill -9 后是能够加八个pid的吗。
所以也就不曾动。之后在kill -9 语句又加了个echo
“the process is killed” 那就平昔都不可能表以后日记里。
作者初步驾驭是怎么回事了,为啥会有多少个pid ,为啥mongo进度会
被kill ,为啥 kill后的echo 不出口了 。 原因是在crontab 中 kill
把经过本身也给杀掉了。crontab会发出子shell进度,当用awk过滤的时候
因为含有了mongo字样 所以也给过滤出来 那就是干吗会有多少个pid。
kill的时候也就能杀死了 ,所以kill后的echo 不出示。
于是乎我换了个过滤条件 用maxConns 消除!

shell编写 脚本内容如下:
目标是监测mongo的连接数 到达自然的连接数后,重启。 #!/bin/bash #source
/etc/profile conn=`/usr/bin/mongo –qui…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website