Linux at命令與cron服務詳解

來源:互聯網
上載者:User

        windows提供了計劃任務這一功能,在控制台 -> 效能與維護 -> 任務計劃, 它的功能就是安排自動啟動並執行任務。 通過'新增工作計劃'的一步步引導,則可建立一個定時執行的任務。 在linux同樣具備相同的功能:

第一部分:at命令

 

1. at命令:在一個指定的時間執行一個指定任務,只能執行一次,且需要開啟atd進程(ps -ef | grep atd查看, 開啟用/etc/init.d/atd start or restart; 開機即啟動則需要運行chkconfig --level 2345 atd on)。

[root @ localhost test]at now +1 minat> echo "hello" > /dev/tty2後斷行符號 # 一分鐘後發送“hello”給tty2終端
--注意: 使用ctrl+d來終結字元輸入(即<EOT>)
at 00:55 2009-12-13at> echo "test at command" > /home/test.txt at 1:00 2009-12-13at>/sbin/shutdown -h now #此處使用絕對路徑
at 命令建立的任務會放在/var/spool/at下面, 是一個指令檔,可以用vi進行編輯。
at now +1 minat> echo "hello" <EOF>#此時會以發送郵件的方式給當前執行的人, 用mail命令可以查看, 即先使用mail命令,出現&後輸入'1'則可查看。
 atq指令:查詢當前機器上有哪些等待執行的任務, 其第一列為工作號。atrm指令:取消任務, eg: atrm 10 #其中10為工作號。batch指令:以一個較低優先順序延時執行任務。
batchat> echo "hello" > /home/abc.txt <EOF>
 2.at命令的安全控制  /etc/at.allow #列出可以使用at命令的使用者, 先找at.allow檔案,再找at.deny檔案  /etc/at.deny #列出不可以使用at命令的使用者, 一行一個使用者。若既無at.allow檔案,也無at.deny檔案,則只有root使用者才能執行at命令 

 

第二部分:cron服務機制

1、cron服務介紹

       cron把命令列儲存在/etc/crontab檔案裡,每個系統使用者如果設定了自己的cron,那都會在/var/spool/cron下面有對應使用者名稱的crontab。無論編寫/var/spool/cron目錄內的檔案還是/etc/crontab檔案,都能讓cron準確無誤地執行安排的任務,區別是/var/spool/cron下各系統使用者的crontab檔案是對應使用者層級的的任務配置,而/var/crontab檔案則是對應系統層級的任務配置。cron伺服器每分鐘讀取一次/var/crontab/cron目錄內的所有檔案和/etc/crontab檔案。

2、使用cron服務執行計畫任務

 #service crond start/restart/stop
 啟動/重啟/關閉cron服務

 #crontab -l
 瀏覽目前使用者的crontab,即瀏覽已存在的計劃工作清單

 #crontab -e
 編輯目前使用者crontab,如之前從未編輯過crontab檔案,那麼crontab是一個空白檔案,我們可以完全手工編寫我們所需要的計劃工作清單,下面詳細介紹計劃工作清單的寫法。

以下是幾個例子:
 

  1. 9 9 * * * /usr/local/bin/cvsb
  2. 3 3 * * 0 /usr/local/bin/qbbak
  3. * */6 * * * /usr/local/bin/esbbak
  4. 20,30 * * * /usr/local/bin/esbak

六個欄位對應的含義如下:
  9         9        *        *        *
分鐘 小時 日期 月份    星期
 

  1. 表示每天早上9點9分執行目錄/usr/local/bin/中的cvsb檔案
  2. 表示每周日淩晨3時3分執行目錄/usr/local/bin中的qbbak檔案
  3. 表示每6小時執行一次,執行時間從第一次執行起計算,當然也可以自訂執行時間,比如0 */6 * * *那程式就會在整點執行
  4. 表示在每小時20分和30分時執行

上面簡單介紹了cron的一些基本用法,這個東東的時間組合可不是一般的強~可以複雜到你無法想象,我們只要掌握少許基本就可以滿足日常需求了。

3、cron進階使用

(1).避免cron產生垃圾檔案

細心的朋友可能會發現系統/var/spool/clientmqueue/目錄下往往存有大量檔案,原因是系統中有使用者開啟了cron,而cron中執行的程式有輸出內容,輸出內容會以郵件形式發給cron的使用者,而sendmail(系統內建的郵件伺服器)沒有啟動所以就產生了這些檔案。

這時可以使用輸出重新導向,即在計劃任務後加上> /dev/null 2>&1

例:

  • 9 9 * * * /usr/local/bin/cvsb > /dev/null 2>&1

(2>&1:把錯誤重新導向到輸出要送到的地方。)
把命令的執行結果重新導向到/dev/null,即把產生的錯誤拋棄。

     
(2).一種經常碰到的情況,需要執行的檔案沒問題,但通過cron就是死活不能正確執行,這時我們可以通過輸出重新導向將cron的執行過程輸出到一個檔案,通過分析執行過程來尋找錯誤的原因

例:

  • 9 9 * * * /usr/local/bin/cvsb > /var/log/crontab_log 2>&1

上例將cron的執行過程輸出到一個文字檔crontab_log,這個檔案可以隨便手動建一個,放在哪都行,重新導向目錄寫對就Ok

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.