at定時任務的一些tips
linux下面有乙個at命令用於執行一次性的定時任務,使用方法很簡單。
類似下面這些命令:
#at 2012-12-12
at> ifconfig
at>
job 16 at 2012-12-12 13:24
之前有一些工作就是利用at去完成了,但是最近遇到乙個問題,需要對之前利用at去執行的命令做一些搜尋統計操作,包括at命令執行時間,執行內容等等。
man at 命令可以得知:
1、atq命令(或者at -l) 可以檢視目前系統中的佇列列表。
#atq
16 2012-12-12 13:24 a root
13 2013-01-02 00:00 a root
12 2013-01-01 00:00 a root
14 2013-01-01 00:01 a root
15 2013-01-01 00:10 a root
2、at -c 檢視具體執行的命令內容。
at -c 16
3、at的所有命令檔案都存放在 /var/spoll/at下面
檔名類似
a0000c01591860
檔案內容其實就是 at -c 顯示出來的內容
最重要的還是at任務和at檔案的關係,at命令檔案的檔名代表什麼含義?
經過一番研究猜測,終於搞定
檔名的格式如下:
第一位表示 at佇列號,也就是atq顯示出來第四列的內容。linux的at說明上顯示只能用a-z,經過測試其實+ ,(等特殊符號也是可以的,修改檔名就行
第二-第五位 表示at的任務號,也就是atq顯示出來的第一列內容,16進製制。
第六-最後 表示at命令的執行時間,精確到分鐘數,16進製制,這個數字其實就是相對於linux初始時間1970-1-1 12:00的分鐘數。
比如01591860
python轉換下:
import datetime
m=datetime.datetime(1970,1,1,12,0)+datetime.timedelta(days=int(0x01591860)/(60*24))
>>> m
datetime.datetime(2012, 12, 31, 12, 0)
至此一開始我的任務就很好搞定了,只要對at檔案進行一些內容查詢,然後分析檔名,就能得到所要的資訊。
其實也可以直接用shell來比如:
atq|awk ''|xargs at -c|grep 要查詢的命令
不過那樣檔案比較多的時候就會比較慢,而且會有一些錯誤,比如
cannot open a0003c0153a24f: too many open files
同時還有幾個附加結論:
1、linux支援的最大at任務數應該是 五位16進製制
2、可以通過修改at檔名來設定一些已經過去的計畫任務
3、at定時任務的最大時間應該是a00001ffffffff,顯示為10136-02-16 12:15
4、乙個bug,/var/spoll/at下面有a00001ffffffff名的檔案時,at命令便不能再生成了,很有意思。
5、要從一台機器上面copy at任務到另外一台機器上面,只要複製at檔案就行了,不過前提是環境變數相同。
crontab定時任務不執行的一些原因總結
前言 最近在工作中遇到了一些問題,crontab定時任務居然不執行,後來我在網上找的時候發現網上主要說了這5個原因 1 crond服務未啟動 crontab不是linux核心的功能,而是依賴乙個crond服務,這個服務可以啟動當然也可以停止。如果停止了就無法執行任何定時任務了,解決的方法是開啟它 1...
Python定時任務sched(一)
這裡介紹一下python中定時任務 sched import datetime import schedule import time import sched schedule2 sched.scheduler time.time,time.sleep def fun2 string1 time....
DC定時任務總結 一
dc 定時任務流程 在跑定時任務前所需要做的工作 在執行1002號定時任務時,首先要確認dc的基礎資料是否已經配置好,其中需要配置的dc基礎資料有以下幾個 a 催欠動作 b 催欠組及催欠組的優先順序 c 催欠策略 d 催欠觸發金額的配置 select from dc dunning policy 催...