使用linux crond定时请求接口

说明

文中所有的shell命令都是在centos7下执行的

crond

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,和windows下的计划任务类似,一般安装完操作系统之后,crond也就被安装好了,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

  • 启动crond
    service crond start

  • 关闭crond
    service crond stop

  • 查看状态
    service crond status

crontab

crontab是一个命令,用于设置需要周期性被执行的操作。crontab可能没有被默认安装,可以自己安装。

  • 安装crontab
    yum -y install crontabs

  • 查看当前已有的定时任务
    crontab -l

  • 编辑定时任务列表
    crontab -e
    编辑之后保存,则会提交定时任务

编写定时任务

crontab打开任务列表,然后可以使用vi来编辑文本,定时任务语法入门参考以下文章:
一文精通 crontab从入门到出坑
Linux crontab 命令

我这里写了一个定时任务,每分钟执行一次自己编写的sync_data.sh脚本


image.png

/home/myshell/error.log 是将标准输出写入到error.log这个文件中
2>&1 是将标准错误也给输出到标准输出中,所以最终就可以在error.log里面看到错误日志

编写脚本并通过定时任务执行

我写了一个sync_data.sh脚本,主要功能是去请求一个接口并判断响应的httpcode是否正确。

#!/bin/bash
#设置变量
url="https://xxx.xxx.com/xxx/sync-data"
 
#定义函数check_http:
#使用curl命令检查http服务器的状态
#-m设置curl不管访问成功或失败,最大消耗的时间为5秒,5秒连接服务为相应则视为无法连接
#-s设置静默连接,不显示连接时的连接速度、时间消耗等信息
#-o将curl下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)
#-w设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码
check_http(){
  status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} -H "Authorization:Bearer xxxxxxxxxxxx
  serialId:31109e9e-10dc-4755-9cfd" $url)
}
 
check_http
date=$(date +%Y%m%d-%H:%M:%S) 
if [ $status_code -ne 200 ];then
  echo "$date 同步数据失败!" >> /home/myshell/console.txt
else
  echo "$date 同步数据成功!" >> /home/myshell/console.txt
fi

小工具

测试crontab表达式的网站
https://crontab.guru/
https://tool.lu/crontab/

参考文章

crontab定时任务
shell脚本:监控HTTP服务的状态
创建和编辑 crontab 文件

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容