shell脚本:定时干死进程并重启

shell脚本:定时干死进程并重启


这是记录我写的第一个shell脚本。

一、写此脚本的原因:最近服务器发生了一次崩溃,已经无法连接到服务器。
在这里插入图片描述

后来了解到出现这种情况,主要是因为进程跑满了,memory被消耗光了,无法为其进行操作,包括vnc操作命令和SSH连接分配内存。

有一些解决方法:

  1. 重启服务器。
  2. 修改最大进程数后系统恢复。
    echo 1000000 > /proc/sys/kernel/pid_max:修改pid_max值为1000000 echo
    "kernel.pid_max=1000000 " >> /etc/sysctl.confsysctl -p:设置永久生效

二、分析并解决的方法

  • 我并没有选上述的解决方法,但是已经出现cannot allocate memory这种情况只能是重启服务器了。
  • 为了避免这种情况(无法连接或执行指令导致项目功能不能正常使用)的发生,我选择对那些持续运行的多线程复杂项目进行定时的释放资源。写了如下脚本,提供参考。
    在这里插入图片描述
    执行命令:
    1、chmod +x restart-bida-macd-datasource-huobi.sh
    2、nohup ./restart-bida-macd-datasource-huobi.sh > sh.out &

附:bash代码块

#!/bin/bashwhile true; dosleep `expr 6 \* 60 \* 60`date=`date "+%Y-%m-%d %H:%M:%S"`pid=`ps -ef | grep "bida-macd-datasource-huobi.jar" | grep -v "grep" | awk '{print $2}'`if [ -z "$pid" ]; thenecho "$date pid does not exist!"elseecho "$date pid:$pid is running!"kill -9 $pid> nohup.outnohup java -jar -XX:+UseConcMarkSweepGC bida-macd-datasource-huobi.jar > nohup.out &fipidMax=`sysctl kernel.pid_max`pidNum=`ps -eLf|wc -l`echo "$pidMax pidsNum:$pidNum"
done


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部