首頁 > 軟體

Linux計劃任務 Crontab 詳解

2020-06-16 17:13:13

Q:Linux下,如果想要在指定的某個時間點干點什麼事,該如何制定計劃?

A:

  計劃任務,建立和管理在指定時間自動執行的任務。

注意:

  要是任務計劃在指定時間自動執行,計劃任務的服務必須是啟動的。

1、使用at命令呼叫atd進程設定在某個特定的時間,執行一次性任務。

2、使用crontab命令呼叫crond進程,設定按固定的週期(如每天、每週等)重複執行預先計劃好的任務。

一、一次性計劃任務

  在指定的日期、時間點自動執行預先設定的一些命令操作。

  系統服務的名稱:/etc/init.d/atd

[root@localhost ~]# service atd start
[root@localhost ~]# service atd status
atd (pid  5790) is running...  //確保atd系統服務啟動
[root@linuxidc mydata]# at 08:45 at> reboot  //按Ctrl+D鍵提交任務 at> <EOT> job 3 at 2017-06-09 08:45 [root@linuxidc mydata]# atq 3 2017-06-09 08:45 a root

1、設定格式  

at  [HH:MM]  [yyyy-mm-dd]

若沒有指定年月日的,預設是當天的。

  1、at  [HH:MM] 

  2、at  [HH:MM]  [yyyy-mm-dd]

  3、at  now +  數位 [minutes|hours|days|weeks]

2、查詢當前設定的at任務列表

  shell> atq  或at -l

3、刪除指定任務編號的at任務

  shell> atrm 編號  #atrm=at -d

4、檢視計劃任務的具體內容

  shell> at -c 任務號

5、使用檔案中的命令作為計劃任務(比較少用)

  shell> at 時間 -f 檔案

  1、at計劃任務檔案:/var/spool/at/a開頭的檔案,任務執行完畢,檔案消失。

  2、/etc/at.deny:只有該名單裡面的人不可以使用

  3、/etc/at.allow:只有該名單裡面的人可以使用

二、週期計劃任務

  按照預先設定的時間週期(分鐘、小時、天……)重複執行使用者指定的命令操作。

1、crontab命令呼叫crond進程執行。

2、系統服務的名稱:/etc/init.d/crond

3、使用者定義的設定,位於檔案:/var/spool/cron/使用者名稱

4、cron服務的紀錄檔檔案:/var/log/cron

[root@localhost /]# service crond start

[root@localhost /]# service crond status

crond (pid  1935) is running...

1、cron服務組態檔:/etc/crontab

[root@linuxidc mydata]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

注意:今後寫指令碼讓crontab去自動執行的時候,盡量寫命令的絕對目錄。

  crontab 只會在/sbin、/bin、/usr/sbin、/usr/bin下查詢命令,如果命令不在這些目錄中,應該要使用絕對路徑。

2、管理cron計劃任務

  root使用者可以管理指定使用者的計劃任務、普通使用者只能管理自己的計劃任務

  1、編輯計劃任務:crontab  -e  -u  使用者名稱

  2、檢視計劃任務:crontab  -l  -u  使用者名稱

  3、刪除計劃任務:crontab  -r  -u  使用者名稱

[root@localhost linuxidc]# crontab -e  //進入編輯模式,不接使用者名稱的,預設是當前使用者
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost linuxidc]# crontab
-l 50 3 2 3 * echo "123" [root@localhost linuxidc]# crontab -r [root@localhost linuxidc]# crontab -l no crontab for root

3、編輯語法

  通過crontab -e 進入編輯模式後,語法格式如下:

 

時間數值的特殊表示方法:

  1、*    表示該範圍內的任意時間

  2、,    表示間隔的多個不連續時間點

  3、-    表示一個連續的時間範圍

  4、/n  指定間隔的時間頻率

0  17  *  *  1- 5  //週一到週五每天17:00
30  8  *  *  1,3,5  //每週一、三、五的8點30分
0  8-18  *  *  *  //8點到18點整
0  12  */3  *  *  //每隔3天的12點整

注意:

  1、資源分配不均:多個計劃任務同時執行。

  2、安全檢查:防止有非法計劃任務。

  3、周和日、月不可同時並存:容易導致計劃任務時間混亂。

4、缺陷彌補  

  缺陷:cron在系統關機後不能執行計劃任務……

  為週期性計劃任務cron收拾殘局的anacron程式解決該缺陷。

  1、anacron程式是系統自帶的定時任務,不能替代cron

    服務名稱:/etc/init.d/anacrond

    服務紀錄檔:/var/spool/anacron

    服務組態檔:/etc/anacrontab

  2、會每個小時被執行一次,指令碼在/etc/cron.hourly

  3、按天、周或月為單位去檢查系統未進行的cron任務

  4、開機時自動執行,然後將未執行的計劃任務執行一遍後,anacron 就會自動停止

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-06/144700.htm


IT145.com E-mail:sddin#qq.com