使用crontab指令的shell脚本实现服务监控报警重启_今天是编程豪的博客-程序员秘密

技术标签: 发送邮件  shell  crontab  自动重启  linux  监控服务  

    这两天做了一个服务监控报警重启的脚本。本质就是用一个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 [email protected]                                #对方收到邮件后显示的发送人

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

set [email protected]#发件人的邮箱

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!








版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzh1070/article/details/80769521

智能推荐

C++趣味问题丨如何利用贪心算法实现搬水果问题?_Emily-C的博客-程序员秘密

这篇文章主要介绍了C++ 搬水果贪心算法实现代码的相关资料,需要的朋友可以参考下。C++ 搬水果贪心算法实现代码题目描述:在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合.

spark配置代理_spark 代理_chg1226的博客-程序员秘密

主要是spark.driver.extraJavaOptions和spark.executor.extraJavaOptions两个参数可以写到配置文件里,spark.driver.extraJavaOptions "-Dhttp.proxyHost=<> -Dhttp.proxyProt=<> -Dhttps.proxyHost=<> -Dht

android关闭软键盘和弹出键盘将布局顶上去_android 软键盘窗口最前显示_zane_xiao的博客-程序员秘密

**- 关闭软键盘**在清单文件中,给当前activity设置键盘属性 android:windowSoftInputMode="stateAlwaysHidden" //在activity设置布局以后,添加 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 2.

逍遥模拟器安卓7.1离线安装xposed_逆向三十六计的博客-程序员秘密

以下操作都是基于安卓7.11.打开逍遥模拟器应用市场,下载RE文件管理器。2、下载离线安装文件并解压,解压后有如下图所示文件。3.将终端模拟器拖进安卓模拟器进行安装。4.打开共享文件夹,将第二部解压出来的xposed文件夹拷贝到共享文件夹。5.打开RE文件管理器,找到共享文件夹下的xposed,鼠标左键长按,然后点击右上角的复制按钮。6.然后切换到左边根目录并进入system目录,点击右下角粘贴按钮。7.回到模拟器主页,打开终端模拟器,输入以下命令并回车,完成后重启模拟器。

【论文-笔记】软件化雷达显控终端的设计与研究_Antrn的博客-程序员秘密

随着数字化技术飞速发展,以硬件为核心的传统雷达系统开发模式将逐渐被以软件技术为核心、以需求为驱动的开发模式所取代。而显控终端是软件化雷达人机交互重要模块,对软件化雷达的研究和应用具有重要意义。本文首先介绍雷达终端的基本概念、发展历史和研宄现状,并设计一款基于CPU和GPU的异构平台的软件化雷达显控终端。然后根据软件化雷达基本概念,将其分为四个软件模块:终端应用程序、系统函数库、程序函数库和服务器...

CANopen总线的协议详解_can总线里每一个节点存在一个od是什么意思_qq_36072126的博客-程序员秘密

目录 简介CAL(CAN Application layer)CANopenCANopen对象字典(CANopen Object Dictionary)CANopen communication管理消息(Administrative message)服务数据对象(Service Data Object,SDO)过程数据对象(P...

随便推点

MybatisPlus 之 PaginationInterceptor 扩展配置bean_Mynah886的博客-程序员秘密

package com.dcits.branch.cloud.tran.configuration;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.core.parser.ISqlParser;import com.baomidou.mybatisplus.extension...

我花了一年时间研究不确定性估算,写下了这份最全指南_程序员之家_的博客-程序员秘密

微信又改版了,为了方便第一时间看到我们的推送,请按照下列操作,设置“置顶”:点击上方蓝色字体“程序员之家”-点击右上角“…”-点击“设为星标”。可以啦,让我们继续相互陪伴...

数据挖掘学习笔记(一)_BerMaker的博客-程序员秘密

1        引论1.1   为什么进行数据挖掘1.1.1           迈向信息时代数据挖掘把大型数据集转换成知识,帮助我们应对当代的全球性挑战。1.1.2           数据挖掘是信息技术的进化数据挖掘可以看做信息技术自然进化的结果。数据库和数据管理产业在一些关键功能的开发上不断发展:数据收集和数据库创建(包括数据存储和检索、数据库事务处理)和高级数据分析(

每日思考第 68 期:如何致富,不靠运气2_蜗牛互联网的博客-程序员秘密

每日思考专栏每周日更新,本期覆盖 20210301~20210307。本期继续谈谈美国风险投资家 Naval 关于致富的观点。210301:承担责任【承担责任】美国风险投资家 Naval ...

宝塔安装redis_宝塔上redis_phpDevelop的博客-程序员秘密

在宝塔面板中安装Redis修改Redis配置: a:将 bind 127.0.0.1 修改为 bind 0.0.0.0 b:将 requirepass foobared 的 foobared 改为自己需要设置的Redis密码 c:重启Redis3. 在安装的PHP中安装Redis扩展。4. 在面板的安全配置里,开放相应的Redis端口(Redis使用的...

推荐文章

热门文章

相关标签