CentOS Linux下定时监测进程并自动重启脚本

环境 CentOS 6.6

提及的内容:Shell脚本;进程检查(pgrep);定时任务(crontab)

Step 1 编写Shell脚本

这个脚本执行以下任务——检查特定名字的进程是否在运行,如果没有运行则执行启动命令并输出一行记录到日志,如果进程正在运行则什么都不做。

创建脚本(放在哪里其实都可以,这里就跟应用放在一起了)

cd /etc/shadowsocks
touch listen.sh
vi listen.sh

创建完毕,进入vi编辑脚本内容

#!/bin/bash
pgrep shadowsocks &> /dev/null #pgrep是读取进程名为输入内容的进程号,返回到下面,&>输入到空文件
if [ $? -gt 0 ]; #$?代表上面的返回值(进程ID,当且仅当存在这个进程时才会高于0) -gt是大于号
then
echo "`date` restart" >> /var/log/sslisten.log #`date`是当前时间,>>输出到log文件中作为新的一行,log文件也可以与脚本放在同一个目录下
/etc/init.d/shadowsocks start  #进程启动命令
#调试阶段此处可以加入返回running状态的内容,去掉井号即可
#else
#echo "`date` restart"
fi

完成后保存并退出,开始测试运行,首先给脚本赋予权限

sudo -s chmod 777 listen.sh

接着测试运行

./listen.sh

如果测试前进程已经运行,那么可以用kill -9杀掉再运行两次,并检查log文件。确认脚本工作正常后可以进行下一步了。

Step2 开启定时任务

crontab是一个周期性任务时间表,可以定时或按给定间隔时间运行特定脚本与任务。

编辑crontab表

crontab -e

进入vi,在文件最后插入

MAILTO=""
*/1 * * * * /etc/shadowsocks/listen.sh

(注意空格)

MAILTO="" 用于关闭发送邮件,否则返回值会做成邮件发送给本机,删掉本行后即可收取返回值

crontab每一行的结构如下

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

而*/1代表的是“每隔多久”执行一次,上文的含义就是每隔1分钟执行一次/etc/shadowsocks/listen.sh脚本

保存退出,接着重启crond服务

service crond restart

等几分钟,杀进程后再看看日志情况。

Step 3 扩展内容

进程启动命令的返回值会被弄成mail自动发到mail目录下,日积月累可能会很恐怖,如果是单一用途设备,可以关掉mail。这个的问题是每次重启都要重新关,比较麻烦

service sendmail stop
不想关的也可以在脚本的进程运行命令后面加上>> /var/log/sslisten.log 合并记录在日志里

注释掉的#else内容有时也很有用,可以选择开启并记录日志,不过自行考虑这会产生多少数据。

参考

Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法 https://cuiqingcai.com/1981.html

环境Ubuntu,本文基本上就源自该内容

CentOS shell脚本 https://blog.csdn.net/TynMhxx/article/details/78879548

crontab https://www.cnblogs.com/clphp/p/6801608.html


  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值