歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> at定時任務的一些tips

at定時任務的一些tips

日期:2017/3/1 13:52:57   编辑:關於Linux
at定時任務的一些tips linux下面有一個at命令用於執行一次性的定時任務,使用方法很簡單。 類似下面這些命令: #at 2012-12-12 at> ifconfig at> <EOT> 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 {jobnumber} 查看具體執行的命令內容。 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 '{print $1}'|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文件就行了,不過前提是環境變量相同。
Copyright © Linux教程網 All Rights Reserved