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