at定時任務的一些tips

2021-12-29 23:01:16 字數 1709 閱讀 4696

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 催...