百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

一文精通crontab服务,并实现tomcat状态监测

liuian 2024-12-01 00:59 24 浏览

crontab简介

在Unix/Linux系统中,周期性任务一般由cron守护进行处理,crond常运行于后台,crond进程每分钟都会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。这类作业一般称为cron jobscron通过读取一个或多个配置文件,这些配置文件中包含了命令行以及调用时间信息,cron的配置文件称为crontab,即cron table的缩写。我们可以通过crontab指令来管理cron机制。一般cron服务在安装完操作系统后,都会自定安装,通过ps -ef|grep cron可以查看crond正在运行的位置信息。

crond服务的启动及关闭

通过service crond status查看crond服务是否被开启。

上图表明当前系统中,crond服务正在运行,其他的几个指令如下

# 开启crond服务
service crond start

# 关闭crond服务
service crond stop

# 重启crond服务
service crond restart

# 检查crond状态
service crond status

# 重新载入配置
service crond reload

crond配置文件

crond的配置文件主要存储于以下三个位置:

  • /var/spool/cron/目录下。该目录下存储了所有用户(包括root用户)的crontab任务的配置文件,每个配置文件以创建者的用户名命名,如:/var/spool/cron/root配置文件为root用户创建的crontab任务。
  • /etc/crontab文件。该文件一般用来负责安排系统管理员制定的维护系统以及其他任务的crontab配置文件。查看该文件,如下

从这里和上面检查crond状态的信息对应,可以看到发送邮件到root是失败的,此处可以通过配置真实email地址实现信息发送功能。

其下的Example介绍了指令配置的格式,常见的配置方式如下

# 每小时的1分执行的任务,即一小时执行一次
01 * * * * root run-parts /etc/crons/cron.hourly

# 每天2点1分执行的任务,即一天执行一次
01 2 * * * root run-parts /etc/crons/cron.daily

# 周日2点1分执行任务,即每周执行一次
01 2 * * 0 root run-parts /etc/crons/cron.weekly

# 每月1号2点1分执行任务,即每月之星一次
01 2 1 * * root run-parts /etc/crons/monthly

前面5个数字用于制定任务执行时间及周期,接着的是root表示执行的级别是root身份,也可以更改其他用户身份。run-parts后面接的是一个文件信息,是一个目录内/etc/crons/cron.hourly的所有可执行文件。即所有定义在cron.hourly中的执行任务,都会在每一小时的第一分钟执行。

  • /etc/cron.d/目录。这个目录用来存放任何要执行的crontab文件或脚本。

crontab格式定义

crontab的定义格式如下。最开始的五个*用于描述时间和周期,是最为重要的定义,之后就是要定期执行的命令。

* * * * * command

对时间周期的解释如下表格

项目

取值范围

含义

第一个*

0~59

一小时中的第几分钟

第二个*

0~23

一天中的第几个小时

第三个*

1~31

一月当中的第几天

第四个*

1-12

一年当中的第几个月

第五个*

0~6

一周当中的星期几(0为周日)

简单的例子

# 每小时的第2分钟执行export.sh任务
2 * * * * /bin/sh export.sh

# 每小时0分执行export.sh,相当于每小时执行一次
0 * * * * /bin/sh export.sh

# 每天凌晨4.20分执行export.sh任务
20 4 * * * /bin/sh export.sh

# 每月12号凌晨4点20分执行export.sh任务
20 4 12 * * /bin/sh export.sh

# 每年7月12号凌晨4点20分执行export.sh任务,一年执行一次
20 4 12 7 * /bin/sh export.sh

# 每周一凌晨4点20分执行export.sh任务
20 4 * * 1 /bin/sh export.sh

# 除了单一的数值配置外,cron还支持一个项目配置多个数值,每个项目的多数值以,分割,两个项目之间以空格分隔,格式不能错误

# 6月12月的凌晨4点和下午4点的20分、25分、35分执行export.sh任务
20,25,35 4,16 6,12 * * /bin/sh export.sh

# 每一个项目,还可以使用*/2的格式,表示每隔多久执行一次
# 每两小时执行一次export.sh任务
0 */2 * * * /bin/sh export.sh

创建crontab任务

  • crontab -e 用于编辑某一用户的cron服务

首先创建一个脚本,打印一行信息(脚本位置:/data/sh/hello.sh),如下

#!/bin/sh
echo "hello, this is a task.[$(date +'%F %H:%M:%S')]" >> /data/sh/log.log 

通过crontab -e,并添加执行该脚本的任务,每分钟执行一次。

crontab -e

# 每分钟执行一次
*/1 * * * * /bin/sh /data/sh/hello.sh

保存后,监控/data/sh/log.log文件,会每分钟打印一次日志信息

hello, this is a task.[2021-08-11 14:06:01]
hello, this is a task.[2021-08-11 14:07:01]
  • crontab -l列出某一用户的所有cron服务详情列表信息
crontab -l
# */1 * * * * /bin/sh /data/sh/hello.sh
  • crontab -r 删除用户的cron服务
# crontab -r 将删除当前用户的所有cron服务
crontab -r
# 查询用户服务
crontab -l
# no crontab for root

crontab -r将删除所有任务,因此需要谨慎使用,一般情况下,可以通过编辑删除某一个不需要的任务,不会使用删除功能。

crontab应用示例

当前业务压力较大,一个基于java的web程序,并发能力不足,数据查询IO压力较大,会导致用户服务无法正常使用。一方面开发人员对该应用进行优化,另外一方面需要开发监控程序监测web应用是否能够正常响应,当无法正常响应时,重启服务,临时解决系统无法响应问题。

  • 定制监控tomcat状态脚本,当发现状态不为200时,则重启tomcat,保存至/data/sh/boot.sh
#!/bin/sh
# 监控tomcat进程,挂了执行重启操作
# 服务器名称
server_name=应用服务平台
# tomcat启动脚本地址
tomcat_start=/opt/tomcat/bin/startup.sh
# 定义所要监控的页面地址或接口地址
req_url=http://www.abc.com/
# 日志输出定义
get_response_code=/data/sh/logs
tomcat_check_log=/data/sh/logs/check.log
check()
{
  # 获取tomcat的进程id
  tomcat_id=$(ps -ef |grep tomcat |grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}')
  echo "[i]$tomcat_id."
  echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
  if [ -n "$tomcat_id" ];then
    echo "[info]tomcat进程ID为:$tomcat_id."
    # 获取返回状态码
    response_code=$(curl -s -o $get_response_code -m 10 --connect-timeout 10 $req_url -w %{http_code})
    if [ $response_code -eq 200 ];then
        echo "[info] 返回码为$response_code,tomcat服务正常."
    else
        echo "[error] tomcat访问出错"
        echo "[error] 开始重启tomcat"
        kill -9 $tomcat_id
        sleep 5s
        $tomcat_start
    fi
  else
    echo "[error] 进程不存在, tomcat自动重启..."
    $tomcat_start
  fi
  echo "-----------------"
}

check>>$tomcat_check_log
  • 创建crontab任务,每10分钟监测一次tomcat状态
crontab -e
*/10 * * * * /bin/sh /data/sh/boot.sh

以上流程完成后,即可监控tail -f /data/sh/logs/check.log日志,间隔10分钟监测服务状态,200时打印功能正常,当状态不为200时,则自动重启tomcat。

相关推荐

2023年最新微信小程序抓包教程(微信小程序 抓包)

声明:本公众号大部分文章来自作者日常学习笔记,部分文章经作者授权及其他公众号白名单转载。未经授权严禁转载。如需转载,请联系开百。请不要利用文章中的相关技术从事非法测试。由此产生的任何不良后果与文...

测试人员必看的软件测试面试文档(软件测试面试怎么说)

前言又到了毕业季,我们将会迎来许多需要面试的小伙伴,在这里呢笔者给从事软件测试的小伙伴准备了一份顶级的面试文档。1、什么是bug?bug由哪些字段(要素)组成?1)将在电脑系统或程序中,隐藏着的...

复活,视频号一键下载,有手就会,长期更新(2023-12-21)

视频号下载的话题,也算是流量密码了。但也是比较麻烦的问题,频频失效不说,使用方法也难以入手。今天,奶酪就来讲讲视频号下载的新方案,更关键的是,它们有手就会有用,最后一个方法万能。实测2023-12-...

新款HTTP代理抓包工具Proxyman(界面美观、功能强大)

不论是普通的前后端开发人员,还是做爬虫、逆向的爬虫工程师和安全逆向工程,必不可少会使用的一种工具就是HTTP抓包工具。说到抓包工具,脱口而出的肯定是浏览器F12开发者调试界面、Charles(青花瓷)...

使用Charles工具对手机进行HTTPS抓包

本次用到的工具:Charles、雷电模拟器。比较常用的抓包工具有fiddler和Charles,今天讲Charles如何对手机端的HTTS包进行抓包。fiddler抓包工具不做讲解,网上有很多fidd...

苹果手机下载 TikTok 旧版本安装包教程

目前苹果手机能在国内免拔卡使用的TikTok版本只有21.1.0版本,而AppStore是高于21.1.0版本,本次教程就是解决如何下载TikTok旧版本安装包。前期准备准备美区...

【0基础学爬虫】爬虫基础之抓包工具的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬...

防止应用调试分析IP被扫描加固实战教程

防止应用调试分析IP被扫描加固实战教程一、概述在当今数字化时代,应用程序的安全性已成为开发者关注的焦点。特别是在应用调试过程中,保护应用的网络安全显得尤为重要。为了防止应用调试过程中IP被扫描和潜在的...

一文了解 Telerik Test Studio 测试神器

1.简介TelerikTestStudio(以下称TestStudio)是一个易于使用的自动化测试工具,可用于Web、WPF应用的界面功能测试,也可以用于API测试,以及负载和性能测试。Te...

HLS实战之Wireshark抓包分析(wireshark抓包总结)

0.引言Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接...

信息安全之HTTPS协议详解(加密方式、证书原理、中间人攻击 )

HTTPS协议详解(加密方式、证书原理、中间人攻击)HTTPS协议的加密方式有哪些?HTTPS证书的原理是什么?如何防止中间人攻击?一:HTTPS基本介绍:1.HTTPS是什么:HTTPS也是一个...

Fiddler 怎么抓取手机APP:抖音、小程序、小红书数据接口

使用Fiddler抓取移动应用程序(APP)的数据接口需要进行以下步骤:首先,确保手机与计算机连接在同一网络下。在计算机上安装Fiddler工具,并打开它。将手机的代理设置为Fiddler代理。具体方...

python爬虫教程:教你通过 Fiddler 进行手机抓包

今天要说说怎么在我们的手机抓包有时候我们想对请求的数据或者响应的数据进行篡改怎么做呢?我们经常在用的手机手机里面的数据怎么对它抓包呢?那么...接下来就是学习python的正确姿势我们要用到一款强...

Fiddler入门教程全家桶,建议收藏

学习Fiddler工具之前,我们先了解一下Fiddler工具的特点,Fiddler能做什么?如何使用Fidder捕获数据包、修改请求、模拟客户端向服务端发送请求、实施越权的安全性测试等相关知识。本章节...

fiddler如何抓取https请求实现手机抓包(100%成功解决)

一、HTTP协议和HTTPS协议。(1)HTTPS协议=HTTP协议+SSL协议,默认端口:443(2)HTTP协议(HyperTextTransferProtocol):超文本传输协议。默认...