contab定时检测服务并自动拉起脚本

最近遇到公司DNS服务器unbound服务总是自动停掉的情况,准备创建个脚本,配合contab进行定时检测,如果发现进程掉了就自动拉起。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

检测进程脚本

首先创建一个shell脚本check_unbound.sh用来检测unbound进程,如果进程不存在则自动拉起

#!/bin/bash
# @Auther: Xiaofu

pid=`ps -ef | grep -w unbound | grep -v grep | awk '{print $2}'`
if [ -z "$pid" ];
then
echo `date +"%Y%m%d %H:%M:%S"`
echo unbound has stopped, will restart now...
systemctl restart unbound
pid=`ps -ef | grep -w unbound | grep -v grep | awk '{print $2}'`
echo new pid is $pid
fi

经过测试,有以下几点要注意:

  • grep的时候用-w可以达到精准的单词匹配
  • 赋值符号前后不能有空格
  • shell中双引号有转义作用,在if语句那里要用双引号不然会报错
  • systemctl是基于centos7的启动服务脚本,其余发行版本命令会有所不同

脚本加入crontab

想要将脚本加入crontab必须要脚本有执行权限

chmod a+x check_unbound.sh

之后通过命令crontab -e开始编辑crontab,编辑的方法和vim一致。

每条规则单独一行,用空格分为7个字段。这里需要补充说明下crontab中每个字段的含义

分钟 小时 日 月 周 [用户名] 命令
  • 第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59
  • 第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23
  • 第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31
  • 第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12
  • 第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。
  • 每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;
  • 第七段应该定义的是:执行的命令和参数。

如果是*表示每一个单元都要执行,而如果想周期执行可以用*/n,每隔n个周期执行i一次。

例如我想每隔5分钟执行一次脚本就可以用

*/5 * * * * command

这里我就直接保持默认,每隔一分钟执行一次脚本

* * * * * /bin/bash /root/check_unbound.sh >> /tmp/check_unbound.log

可以通过crontab -l来查看现在在运行的contab脚本。

验证

接着我手动停掉unbound服务

systemctl stop unbound

过了约一分钟,发现服务被自动拉起,并且自动写入了log,验证成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值