Linux 命令大全(十六)——計划任務


十六、 計划任務
  在很多時候為了自動化管理系統,都會用到計划任務,比如關機,管理,備份之類的操作, 都可以使用計划任務來完成,這樣可以是管理員的工作量大大降低,而且可靠度更好。
  linux 系統支持一些能夠自動執行任務的服務,稱為計划任務。
LINUX 有如下三種計划任務:
  • at:指定一個時間執行一個任務 (適用一個或多個任務,執行一次后就不用)
  • cron:根據一個時間表自動執行任務 (使用一個或多個任務,周期性執行)
  • 系統級別的計划任務及其擴展anacron:在一個指定時間間隔錯過后自動執行任務

at:

  安排一個任務在未來執行,需要一個 atd 的系統后台進程 檢查 atd 進程是否啟動
service atd status
# atd (pid 2274) 正在運行...


chkconfig |grep atd
# atd
# 0:關閉 1:關閉 2:關閉 3:啟用 4:啟用 5:啟用 6:關閉

# 如果未啟動,可以使用如下命令:
service atd start
# 正在啟動 atd: [確定]

chkconfig atd on

 

常用指令
at:安排延時任務
具體使用方法:
例 1:
at now+2 minutes 回車
# >輸入要執行的命令>ctrl+d 結束輸入


at now+2 minutes
at> wall Aixi
at> <EOT>
# job 2 at 2010-06-18 16:36
# <EOT>是 ctrl+d 中斷輸入,這個命令意思是發送一個廣播內容是 Hello Aixi.具體時間可以改,單位可以改,可以用 hours,months,years,weeks 等.

 

例 2 跟具體時間
 at 16:39 dec 10
at> Hello Aixi
at> <EOT> ctrl+d 結束輸入
# job 3 at 2010-12-10 16:39
# 意思是在今年的 12 月 10 日 16:39 運行這個命令.如果不加月和日,默認就是今天.

 

Atq——查詢當前的等待任務用 atq 來查詢,已經運行的任務,就消失了。這就是 at 計划任務的重點,只運行一次
atrm——刪除等待任務,啟動計划任務后,如果不想啟動設定好的計划任務可以使用 atrm 命令刪除。格式:atrm 任務號(命令后面跟計划任務編號,如果不跟,就會刪除這個用戶所有的計划任務。)

例 3
atrm 10 # 刪除計划任務 10
atq # 查看計划任務是否刪除

 

  at 將要運行的命令以文本形式寫入/var/spool/at/目錄內,等待 atd 服務的取用和執行。
  還可以進入到/var/spool/at 目錄里把計划任務刪除,計划任務的文件都保存在該目錄里,可以用 rm -f
  文件名來刪除(以文件的形式刪除計划任務,因為計划任務是以文件形式保存在該目錄中)
 

cron服務

  ( 參考網址: http://www.linuxsir.org/main/?q=node/209)
  相對與 at,cron 的優點就是能夠周期性的執行某個命令,at 卻只能執行一次,cron 的后台進程名字 是 crond ,cron 也是 system V 的服務,所以我們可以 service crond start|stop 來啟動和關閉此服 務,也可以使用 chkconfig 或者 ntsysv 來選擇 cron 服務的默認開啟。
命令:
crontab -e  # 編輯當前用戶的 cron 表
crontab -l   # 查看當前用戶的 cron 表
crontab -r   # 刪除當前用戶的 cron 進程
crontab -u  # 用戶名 以某用戶的身份來控制 cron 表

 

還有個重要的知識點,當用戶的計划任務建立后是存放在 var/spool/cron 這個目錄
 
  當使用 crontab -e 編輯當前用戶的 cron 表后,會出現一個 vi 文件,cron 的格式是這樣的。分成兩 列,左邊是時間,右邊是運行的命令。時間是由 5 個部分組成。
例:
# 每分每小時每天每月每周廣播 hello everyone
* * * * * wall hello everyone
# 5 個星號分別代表:minute hour day-of-month month-of-year day-of-week ,而 wall hello everyone 這是命令內容。如果要每兩分鍾發送就用*/2 代替第一個*。也可以是用具體時間來表示。

# 使用 crontab -e 編輯當前用戶的 cron 表
'''
這里的 5 個星號就代表的時間和日期:
第一個*星號代表個小時的第幾分鍾:minute 范圍是從 0-59
第二個*星號代表每天的第幾個小時:hour 范圍是從 0-23
第三個*星號代表每月的第幾個日:day-of-month 范圍從 1-31
第四個*星號代表沒年的第幾個月:month-of-year 范圍從 1-12
第五個*星號代表每周的星期幾:day-of-week 范圍從 0-6,其中 0 表示星期日
用戶名:也就是執行程序要通過哪個用戶來執行,這個一般可以省略;
'''

 

命令:執行的命令和參數。
時程表的格式如下 :
  • f1 f2 f3 f4 f5 program
  • f1 是表示分鍾,
    • 為 * 時表示每分鍾都要執行 program, 
    • 為 a-b 時表示從第 a 分鍾到第 b 分鍾這段時間內要執行
    • 為 */n 時表示每 n 分鍾個時間間隔執行一次
    • 為 a, b, c,... 時表示第 a, b, c,... 分鍾要執行
  • f2 表示小時, 
    • 為 * 時表示每小時都要執行程序,其余以此類推, 
    • 為 a-b 時表示從第 a 到第 b小時都要執行,其余以此類推
    • 為 */n 表示每 n 小時個時間間隔執行一次,其余以此類推
    • 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其余以此類推
  • f3 表示一個月份中的第幾日
  • f4 表示月份
  • f5 表示一個星期中的第幾天
  • program 表 示要執行的程序。
 
使用者也可以將所有的設定先存放在檔案 file 中,用 crontab file 的方式來設定時程表。
 
 
例:
# 1. 9 月 10 日 25 分執行 ls var/spool/cron 任務
25 * 10 9 * ls var/spool/cron

# 2. 每周日,每分鍾執行 wall Hello redking.blog.51cto.com 這個命令
*/1 * * * 0 wall Hello redking.blog.51cto.com

# */ 表示每多少分鍾執行一次

# 3. 每晚的 21:30 重啟 apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart

# 4. 每月 1、10、22 日的 4 : 45 重啟 apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

# 5. 每周六、周日的 1 : 10 重啟 apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart


# 6. 在每天 18 : 00 至 23 : 00 之間每隔 30 分鍾重啟 apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

# 7. 每一小時重啟 apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart

# 8. 晚上 11 點到早上 7 點之間,每隔一小時重啟 apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

# 9. 每月的 4 號與每周一到周三的 11 點重啟 apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

# 10. 一月一號的 4 點重啟 apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

# 11. 在 12 月內, 每天的早上 6 點到 12 點中,每隔 3 個小時執行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup

# 12. 每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執行 echo "haha"
20 0-23/2 * * * echo "haha"

 

系統級別的計划任務及其擴展anacrontab

  這個是系統設置好了,清理系統垃圾或者是自動執行某些腳本的系統任務,一般我們做了解就行了, 不要更改配置文件是/etc/conrtab
  • SHELL:就是運行計划任務的解釋器,默認是 bash
  • PATH:執行命令的環境變量
  • MAILTO:計划任務的出發者用戶
  • HOME:家目錄為/
  • run-parts 是一個腳本,在/usr/bin/run-parts,作用是執行一個目錄下的所有腳本/程序。
  • run-parts /etc/cron.hourly 執行目錄/etc/cron.hourly/之下的所有腳本/程序.
  • run-parts 下面就是運行的命令
  • vim /etc/crontab 與 crontab -e 寫入的定時運行的區別?
  • vim /etc/crontab:是系統級別定義的 crontab,/etc/crontab 的所有者和組都是 root
  • crontab -e :是用戶自定義的 crontab,是所有的用戶都可以寫入的 兩種方法記錄的位置不一樣,一個在/etc/ 另一個在/var/ 里面。都被 cron 服務調用
如果系統在以上說的時間沒有開機怎么辦?那么這個腳本不就是不能執行了?設計者早就想到了這個 問題,所以就有了 cron 服務的擴展,目的就是為了防止非 24 小時開機的計算機遺漏的守護任務, anacr ontab 就是系統計划任務的擴展文件:在一個指定時間間隔錯過后自動執行任務
格式是這樣的:
  • period delay job-identifier command
  • period — 命令執行的頻率(天數)
  • delay — 延遲時間(分鍾)
  • job-identifier — 任務的描述,用在 anacron 的消息中,並作為作業時間戳文件的名稱,只能包括非空白的字符(除斜線外)。
  • command — 要執行的命令
 

相關知識點鏈接

 
          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM