简言
公司项目运营在linux系统上,为了方便发包,自己写了一个自动发包程序。但是,经常会出现tomcat进程没有杀死的情况。为了解决此问题,写了一个处理此类进程的脚本。写下本文的就是记录一下这个脚本,同时也希望能帮到有此需求的人。
步骤分解
1.公共变量
#!/bin/sh
JAVA_JPS="$JAVA_HOME/bin/jps -v"
#公共变量
declare node_name;
2.检索符合条件的tomcat进程
#获取tomcat节点PID
function get_tomcat_node_pid {
pids_search=`$JAVA_JPS | grep $node_name | awk '{print $1}'`;
echo $pids_search;
}
- shell中将某个方法、命令的执行结果赋值给某个变量时,需要使用
反引号
。反引号``不是单引号,而是TAB键上方那个键。- $node_name为tomcat节点名称。
3.检查tomcat进程
#检查tomcat节点是否被杀死
function check_tomcat_node_killed {
pids=`get_tomcat_node_pid`;
pids_array=($pids);
pids_len=${#pids_array[@]};
if [ $pids_len -eq 0 ]
then
return 0;
fi
return 1;
}
根据pids集合的长度判断tomcat进程是否存在。
return
只返回number类型的数值,0表示正确,其他为不正确。如果想获取方法的返回值,使用$?
接收即可。
4.杀死tomcat进程
#杀死tomcat节点进程
function kill_tomcat_node {
echo "$pids";
for node_pid in $pids
do
echo "kill tomcat node pid of $node_pid";
kill -9 $node_pid;
done
}
利用for循环逐个杀死符合检索条件的tomcat进程。
5.完整脚本
#!/bin/sh
JAVA_JPS="$JAVA_HOME/bin/jps -v"
#公共变量
declare node_name;
#获取tomcat节点PID
function get_tomcat_node_pid {
pids_search=`$JAVA_JPS | grep $node_name | awk '{print $1}'`;
echo $pids_search;
}
#检查tomcat节点是否被杀死
function check_tomcat_node_killed {
pids=`get_tomcat_node_pid`;
pids_array=($pids);
pids_len=${#pids_array[@]};
if [ $pids_len -eq 0 ]
then
return 0;
fi
return 1;
}
#杀死tomcat节点进程
function kill_tomcat_node {
echo "$pids";
for node_pid in $pids
do
echo "kill tomcat node pid of $node_pid";
kill -9 $node_pid;
done
}
#杀死进程
tomcat_kill() {
node_name=$1;
check_tomcat_node_killed;
check_tomcat_node_result=$?;
if [ $check_tomcat_node_result -eq 1 ]
then
kill_tomcat_node;
else
echo "tomcat node is killed already!";
fi
exit $?
}
#执行kill方法
tomcat_kill $1
结尾
这个脚本只是一个简单的执行脚本,为了更友好,可以加上各种友好提示方法,有需要的朋友可以自己去增加。
网友评论