说明
文中所有的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/