Linux运维之自动重启Java程序

标签: 无 分类: 未分类 创建时间:2021-01-20 10:52:33 更新时间:2024-12-03 13:01:37

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!"
#后台PhEMSJava
/bin/nohup /usr/java/jdk1.8.0_201/bin/java -jar /cloud/master/PhEMSJava/PHEMSjava.jar > /dev/null 2>&1 &
## 关闭PHEMSgateway
ps -ef | grep PHEMSgateway | grep -v grep | cut -c 9-14 | xargs -I {} kill -9 {} 2>&1;
## 开启PHEMSgateway
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
#第二种,准确判断pid的信息,
#-C 表示的是nginx完整命令,不带匹配的操作
#--no-header 表示不要表头的数据
#wc -l 表示计数
COUNT=$(ps -C nginx --no-header |wc -l)
echo "ps -c|方法:"$COUNT

#shell 关键字都需要有空格
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
## 其中,wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出
## -l :统计行数:使用换行符‘\n’作为行结束标志,实际是统计换行符个数
## grep -v grep :去除包含grep的进程行
## -ne :(not equal)不等于

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
## 获取java的pid
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;
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。