使用crontab指令的shell脚本实现服务监控报警重启

    这两天做了一个服务监控报警重启的脚本。本质就是用一个shell命令去监控服务状态,如果宕机就会自动重启,并向指定邮箱发送邮件对管理人员进行提醒,再使用crontab命令设置每隔一分钟运行一次这个shell脚本,实现对服务的监控。

    本来很简单,以为半天就能实现,结果问题出在了发送邮件上,硬生生的搞了两天,才在部门其他大神的帮助下搞定,所以在此总结下。

    首先先写一个简单的监控服务的shell脚本,公司在服务器上跑的是以jar包的形式,为了方便测试,我就随便找了一个jar包,命名为1.jar

    直接新建编辑一个moni.sh 脚本文件

vi moni.sh

在moni.sh中进行编辑

run=$(ps -ef |grep "1.jar" |grep -v "grep")        
if [ "$run" ] ; then 
echo "The service is alive!" 
else
echo "系统宕机" | mail -s "警告" 2364******@qq.com    #接收人邮箱地址
echo "The service was shutdown!" 
echo "Starting service ..." 
nohup java -jar 1.jar & 
echo "The service was started!" 
fi 

再对crontab命令进行设置

crontab -e

直接会进入编辑页面,输入以下代码设置间隔时间自动运行

*/1****bash /home/wangzh/moni.sh               #设置为每间隔1分钟执行一次脚本
@reboot nohup java -jar 1.jar &                #每当系统重启时都会自动运行服务

    linux发送邮件很简单,它自带有发送邮件的mail,一开始我使用mail进行发送邮件发现不成功;就想通过linux的sendmail来发送,这个需要使用yum下载sendmail的rpm包,且配置十分麻烦,最后由于种种原因放弃了,回归linux自带的mail发送邮件方式。

    首先,要对 etc 下的 mail.rc进行编辑

vim /etc/mail.rc

进入编辑页面后,在其中添加以下配置信息

set from=xxxx@126.com                                #对方收到邮件后显示的发送人

set smtp=smtp.126.com#你发送邮件的邮箱服务器地址

set smtp-auth-user=xx@126.com#发件人的邮箱

set smtp-auth-password=xxx#开启你邮箱中运行第三方发送的授权码,填写授权码

set smtp-auth=login

    保存退出后,输入以下发送邮件命令进行测试

(我的个人经验,主题不要用英文,内容不限但不能写test,容易被当成垃圾邮件直接被第三方邮件服务器拦截)

echo "邮件内容" | mail -s "邮件主题" 2364600***@qq.com             #邮箱为接收人邮箱,邮箱服务器地址跟你发件人邮箱有关,接收人邮箱并无限制

    到此基本功能都实现了。但问题出在了发送邮件上面。发送邮件屡次不成功,一开始执行命令后,不弹出错误信息,也收不到邮箱,后来开始报 timed out,也报过一些诸如535这样的错误代码,中间排除了许多可能,最后把错误定位到端口号上。

    首先,linux的发送邮件端口默认的是25,。而我们公司是在阿里云服务上运行的,阿里云默认把发邮件的25端口给禁了,好像是怕不安全。然后,我们就只能使用阿里云提供的另外的邮件端口:使用TSL加密协议,也就是465端口

    TSL也就是使用SSL加密的方式,使用465或者其他端口来发送邮件,现在大部分邮箱都支持SSL,具体SSL的端口 地址,也可以查百度,我使用的是163邮箱是465端口。既然使用的是SSL协议,那当然是要有证书的了,下面是获取证书的命令:

    先创建一个证书的存放目录(.cert加了一个.是隐藏目录的意思,具体需不需要隐藏,我也不知道,网上教程使用的隐藏)

mkdir -p /home/wangzh/.certs/                         //放到绝对路径下

再以此输入以下命令:

echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt  #如果你使用的是其他邮箱,这里需要你自己改成其他的邮箱服务器地址和端口号
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /home/wangzh/.certs
命令执行完毕后,如果不报错,就会看到以下文件:

然后有了证书文件,我们还需要在etc/mail.rc中编辑代码获取证书文件

vim /etc/mail.rc

在mail.rc中添加以下代码:

set ssl-verify=ignore
set nss-config-dir=/home/wangzh/.certs          #这个路径是你自己的certs存放的路径

保存退出。一切ok!






 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值