1.第一种方法
1 2 3 4 5 6 7 8 9 10
| if [ -z "$(ps -ef|grep PHEMSjava |grep java)" ];then echo "PHEMSjava is not run!" /bin/nohup /usr/java/jdk1.8.0_201/bin/java -jar /cloud/master/PhEMSJava/PHEMSjava.jar > /dev/null 2>&1 & ps -ef | grep PHEMSgateway | grep -v grep | cut -c 9-14 | xargs -I {} kill -9 {} 2>&1; nohup /usr/java/jdk1.8.0_201/bin/java -jar /cloud/master/PhEMSJava/PHEMSgateway.jar > /dev/null 2>&1 & echo `date +'%Y-%m-%d %H:%M:%S'` "PHEMSoauth2server start!" >> /cloud/crontab/check_phems.log fi
|
其中的”$(ps -ef|grep PHEMSjava |grep java)”判断不是很准确,就是判断不出来PHEMSjava程序是否在运行,同时 cut -c 这个命令在于截取字符串,如果pid数值较大,就会导致9-14判断截取到了一部分pid
参考文章:
1.linux的shell命令检测某个java程序是否执行 (这里的脚本其实就是一句话)
2.Shell 重定向 2>&1 含义说明
2.第二种方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
COUNT=$(ps -C nginx --no-header |wc -l) echo "ps -c|方法:"$COUNT
if [ $COUNT -eq 0 ] then echo no run else echo is run fi echo $COUNT
|
参考文章:
1.Shell之判断程序是否运行-yellowcong (这个是判断程序名称就是nginx的进程的脚本,也就是完全匹配,必须名称是nginx,无法查找找像java这样的应用程序)
2.Linux shell脚本之 if条件判断 (这是shell脚本的if判断)
2.第三种方法
第二种方法其实也有缺陷,就是没办法查找自定义的程序名称,比如PHEMSjava
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
PCOUNT=`ps -ef|grep PHEMSjava|grep -v grep|wc -l` echo PCOUNT=${PCOUNT}
if [ ${PCOUNT} -ne 0 ]; then echo "Process is running!" else echo "Starting process..." fi
if [ `ps -ef|grep PHEMSjava|grep -v grep|wc -l` -ne 0 ]; then echo "Process is running!" else echo "Starting process..." fi
|
参考文章:
1.Linux学习笔记——判断java进程是否存在,不存在则启动 (这里的脚本有一个语法错误,grep -v grep而不是grep -v -grep,还有一个问题就是如果有其他进程能跟这个进程名称模糊匹配,也会查出当做是这个进程)
2.不错的linux下通用的java程序启动脚本 (这个没啥用)
4.第四种方法
这种方法,就是要保证路径的唯一性
1 2 3 4 5
| ps -ef|grep /cloud/master/PhEMSJava/PHEMSjava.jar |grep -v grep|awk '{print $2}'
ps -ef|grep /cloud/master/PhEMSJava/PHEMSjava.jar |grep -v grep|awk '{print $2}' | xargs -I {} kill -9 {} 2>&1;
|
参考文章:
1.获取java应用PID的几种方式