linux计划任务如何实现延时执行脚本?
两种方法:
crontab中的最小时间设置可以是分钟。如果你的延迟是分钟,直接放大crontab中的分钟设置即可。
2)修改脚本,在脚本的开头(当然声明语句如#!/bin/bash)加usl
crontab和at命令的区别?
如果一个命令只需要执行一次,可以使用at命令,它实际上是atd服务,所以必须启动这个服务。基本上,at是默认开启的。输入at会将工作流写入目录/var/pool/at(ubuntu也在。/cron文件夹),然后等待系统执行它。另外,at是默认每个人都可以执行的,可以强制使用和限制。
at的语法:
在[-m]时间#-m表示是否将筛选结果邮寄给用户。
Atq(查看工作流程)
atrm[作业编号](删除工作流程)
时间:形式有
时:分钟年-月-日
或者:
HH[pm:am]numberv[小时;天;周]
HH:嗯
HH[pmvam]
进入at模式后输入指令。
Ctrld可以退出。
超时取消订单怎么处理?
1.定期投票
最简单的方法是写下取消订单的逻辑。一般是取订单表中要支付的订单,然后做遍历取消处理,使用Linux系统的crontab来执行定时取消订单的功能。
优点:简单快捷,小生意可以考虑。
缺点:
由于Linux的限制,只能精确到秒。
轮询频率不能独立控制。如果运营和开发分开管理,每次都需要修改运维配置。
如果第一次轮询花费了很长时间,而第二次轮询又开始了,那么任务将会重复。
占用数据库资源
无法同时执行。
2.任务调度
有些web框架会有任务调度的功能,比如php的Laravel框架。
优势:
轮询频率可以由代码控制,不完全依赖于系统;
任务可以不重复执行。
缺点:It这类似于常规轮询。
3.延迟队列处理
如果系统中要处理的订单太多,处理起来会很费时间。如果第一次轮询没有结束,第二次轮询又开始,会导致任务重复执行,同时会抑制对数据库资源的占用,给数据库造成很大压力。延迟队列用于取消订单,延迟时间设置为订单提交后30分钟,效率会高很多。常用的延迟队列有
Redis(订阅密钥失效事件)
框架自带的队列(例如,Laravel框架来自排队)
RabbitMQ延迟队列
优势:
不需要轮询订单表,减少了数据库的压力。
不再赘述。
高效率
可以配合多线程处理
业务量于集群。
独立于系统的crontab