大数据基础-定时器

简介: 定时器学习

大家想象一个场景,如果你们老大给你分配了一个任务,每天凌晨1点登录服务器执行一个数据处理的脚本,这个活不难,也不大,但是很费劲,如果你连续一天两天是感觉不到任何不适的,但是当你连续一个月、两个月的话你就会发现,这个活是真不好干,虽然只是一条命令的事。

其实这个事情完全没有必要让我们人工去做,针对这种周期性需要被执行的命令完全可以选择使用定时器定时调度执行。

那我们下面要学习的这个crontab就是干这个事的,它其实是类似于java中的timer定时器的

它可以作用于周期性被执行的命令:例如每天凌晨1点去"偷菜",不知道大家对于偷菜这个游戏有没有概念,如果没有概念的话说明我们的代沟真的不止一两个了。

crontab在使用的是也很简答,只需要配置一条命令即可,连代码都不需要写,这可比java中的timer要方便多了

crontab的格式是这样的:* * * * * user-name command

网络异常,图片无法展示
|

这条配置需要添加到crontab服务对应的文件中,在配置之前,需要先确认crontab的服务是否正常

查看crontab服务状态:systemctl status crond

网络异常,图片无法展示
|

看到里面的active说明这个服务是启动的,如果服务没有启动可以使用systemctl start crond 来启动,如果想要停止 可以使用systemctl stop crond

确认这个服务是ok的之后,我们就可以操作这个服务对应的配置文件了,/etc/crontab

可以先打开看一下这个配置文件

网络异常,图片无法展示
|

从这个配置文件里面其实也可以看到我们前面分析的crontab的格式

下面我们就来配置一个。

假设我们有一个需求,每隔1分钟打印一次当前时间,时间格式为年月日 时分秒

这个需求需要写到脚本中,然后在crontab中直接调用脚本即可。

其实我们只需要在脚本中实现打印当前时间的操作即可,每隔1分钟执行一次这个操作让crontab实现即可

创建脚本文件 vi showTime.sh

网络异常,图片无法展示
|

然后在/etc/crontab文件中配置

每1分钟执行一次,其实是最简单的写法,前面都是*号就行,表示都匹配

最终的效果就是这样的

* * * * * root sh /root/shell/showTime.sh

注意:这里建议指定脚本的全路径,这样不容易出问题,还有就是执行命令在这里写好了以后建议拿出来单独执行一下,确认能不能正常执行,这样可以避免出现一些低级别的问题

网络异常,图片无法展示
|

这样验证脚本可以正常执行以后就可以保存配置文件了,但是还有一个问题

现在这种情况脚本执行之后的结果我们是没有保存的,如果让crontab定时去调度执行,我们压根就看不到执行的结果信息,所以需要把脚本执行的结果重定向到一个文件中,

需要使用追加重定向

* * * * * root sh /root/shell/showTime.sh >> /root/shell/showTime.log

保存配置文件即可,等待执行。

我们来看查看一下结果文件,确认一下是否正常执行,可以使用tail -f 监控一会

网络异常,图片无法展示
|

通过这个文件中的信息可以看出来脚本是每隔1分钟被调度一次。

注意了,这里所说的每1分钟执行一次,其实会在每1分钟的第1秒开始执行

如果我们执行的脚本确实不会产生任何输出信息,那么我们如何确认脚本是否被成功调度了呢?

这个时候可以通过查看crontab的日志来确认

crontab的日志在/var/log/cron文件中,使用tail -f命令实时监控

网络异常,图片无法展示
|

查看这个日志文件的内容可以发现我们添加的定时任务确实被成功调度了,每调度一次都会记录一条日志数据,便于我们后期排查问题。

这样就成功完成了我们的第一个定时任务,如果这个任务暂时不想调度了,想临时停止一段时间,可以修改配置文件,在这一行配置前面加上#号就可以了,这样这一行配置就被注释了,后期想使用的时候把#号去掉就可以了。

#* * * * * root sh /root/shell/showTime.sh >> /root/shell/showTime.log

下面大家思考一个问题,如果设置任务每7分钟执行一次,那么任务分别会在什么时间点执行?

任务会在我们配置好之后7分钟执行吗? 不会的,

注意了,crontab中任务是这样执行的,我们这里设置的7分钟执行一次,那么就会在每个小时的第0、7、14、21、28.....分钟执行,而不是根据你配置好的时候往后推,这个一定要注意了

我们来验证一下,修改配置文件

*/7 * * * * root sh /root/shell/showTime.sh >> /root/shell/showTime.log

还有就是这里的间隔时间是7分钟,7分钟无法被60整除,那执行到这个小时的最后一次以后会怎么办呢?它最后会在第56分钟执行一次,再往后的话继续往后面顺延7分钟吗?不是的,下一次执行就是下一个小时的0分开始执行了,所以针对这种除不尽的到下一小时就开始重新计算了,不累计。

这个我在这里就不再等到下一个小时了,没什么意义,大家可以在下面自己做实验验证一下。

实验是检验真理的唯一标准,但是你一定要保证你的实验步骤是正确的,要不然真理都会被你给弄成歪理。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7月前
|
分布式计算 Java 大数据
大数据常用调度平台
大数据常用调度平台
199 0
|
SQL 分布式计算 Hadoop
|
6月前
|
存储 机器学习/深度学习 分布式计算
大数据入门指南:掌握大数据,抢占未来(基础)
大数据入门指南:掌握大数据,抢占未来(基础)
36 0
|
运维 监控 Java
|
大数据 Java
大数据之线程学习
  为什么要让run()方法自动开启。  cpu有随机性,线程抢到cpu,才能干活,所以run()方法必须通过strat()方法自动启动,这样cpu就获得了一个信号,知道该线程可以抢占cpu资源; 手动运行垃圾回收器 原理:当执行gc是,会触发垃圾回收机制,开启垃圾回收线程,执行finalize方...
910 0
|
算法 大数据 数据安全/隐私保护
大数据最核心的关键技术——32个算法,记得收藏!
奥地利符号计算研究所的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。
11518 0