歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

at定時任務的一些tips

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