crontab--計劃任務的使用

crontab命令常見於Unix和類Unix的操作系統之中,用於設置週期性被執行的指令。
該命令從標準輸入設備讀取指令,並將其存放於“crontab”文件中,以供之後讀取和執行。該詞來源於希臘語 chronos(χρνο),原意是時間。通常,crontab儲存的指令被守護進程激活, crond常常在後臺運行,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱爲cron jobs。

有點類似於鬧鐘的意味,鬧鐘是到指定時間,播報一個鈴聲,叫你起牀,這個是到指定時間,去執行某項任務。

常見的一些計劃任務

>每分鐘需要執行一個程序去檢查系統運行狀態
>每天凌晨需要對過去的一天業務數據進行統計
>每個星期需要把日誌文件備份(如果日誌信息太多那麼佔用的磁盤空間就會越大,而且日誌我們大多都是實時分析一週之內的日誌信息,而超出一週的日誌我們會將它進行備份)每天凌晨兩三點鐘進行備份
>每個月需要把數據庫進行備份
>一般寫腳本,然後計劃任務執行

單一計劃任務

[root@localhost ~]# at now + 2 min    ##at+時間,即任務執行的時間
at> wall hello,csdn!	    ##任務執行的內容,wall,廣播播報,大喇叭告訴所有人。
at> <EOT>						##ctrl+d 退出
job 4 at Sat May  9 08:57:00 2020   ## 在兩分鐘後有一個任務將執行
2min後
[root@localhost ~]#
Broadcast message from [email protected] (Sat May  9 08:57:00 2020):

hello,csdn!                          ##任務執行時間於規定時間相同

查看計劃任務
#atq   (注意 當你這個計劃任務執行後再次查看就沒有顯示了)
[root@localhost ~]# atq
6       Sat May  9 09:20:00 2020 a root
#ll /var/spool/at   當計劃任務沒有執行會在該目錄下產生一個普通文件,但是執行後該位置的文件也就不在了
在/var/spool/at 可以查看當前的at任務。
[root@localhost at]# ll
total 4
-rwx------. 1 root root 3746 May  9 09:10 a00005019419a8
drwx------. 2 root root    6 May  9 08:57 spool


刪除任務:atrm
[root@localhost ~]# at now + 2min
at> wall haha!
at> <EOT>
job 7 at Sat May  9 09:21:00 2020
[root@localhost ~]# atq
7       Sat May  9 09:21:00 2020 a root
[root@localhost ~]# atrm 7  ##刪除的是計劃任務的編號
[root@localhost ~]#
[root@localhost ~]# atq
[root@localhost ~]#

週期計劃任務

yim install  crond
格式說明:
               * * * * *               分     時    日    月    周(五個*號的作用)
                         
                               0-59  0-23 1-31 1-12 0-6
    
minute: 表示分鐘,可以是從0到59之間的任何整數。*/1
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這裏的0或7代表星期日。
command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。

在以上各個字段中,還可以使用以下特殊字符:
星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同    時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。

[root@localhost ~]# crontab -e -u root   ##-e,添加cron表,-u,加用戶
crontab: installing new crontab
[root@localhost ~]#
[root@localhost ~]# crontab -l      ##查看cron表
46  09 * * 06   wall haha
[root@localhost ~]# cat /var/spool/cron/root    ##查看某用戶的cron表內容
46  09 * * 06   wall haha
[root@localhost ~]#
[root@localhost ~]#到達指定時間
Broadcast message from [email protected] (Sat May  9 09:46:01 2020):

haha

[root@localhost ~]# crontab -e -u root   ##創建多個計劃任務
crontab: installing new crontab
[root@localhost ~]# crontab -l  ##查看計劃任務-l
46  09 * * 06   wall haha
* 12 * * *      wall hehe
* * * * *       wall xixi
[root@localhost ~]# cd /var/spool/cron/    計劃任務不會執行一次而消失的原因,會生成一個文件,文件執行後不會移出,所以當到達指定時間時候,會繼續執行。鬧鐘也一樣,可以設定每個週週內早上6點叫你起牀,而週末就不設定鬧鐘一樣。
[root@localhost cron]# ll   ##設定不同的用戶就有不同用戶的計劃任務文件
total 8
-rw-------. 1 root root 26 May  9 09:47 redhat
-rw-------. 1 root root 78 May  9 09:56 root
[root@localhost cron]# cat root
46  09 * * 06   wall haha
* 12 * * *      wall hehe
* * * * *       wall xixi
[root@localhost cron]#  每分鐘的xixi廣播
Broadcast message from [email protected] (Sat May  9 09:57:01 2020):

xixi
[root@localhost cron]# crontab -l
46  09 * * 06   wall haha
* 12 * * *      wall hehe
* * * * *       wall xixi
[root@localhost cron]# crontab -r   計劃任務刪除,全刪,也可以通過crontab,刪除某一條內容。
[root@localhost cron]# crontab -l
no crontab for root
[root@localhost cron]#

計劃任務的允許和拒絕列表

默認先查看允許列表,通過不看拒絕列表(系統中沒有允許列表,需要自己創建)

[root@localhost cron]# vim /etc/at.deny  ##編輯拒絕列表,拒絕用戶redhat
[root@localhost cron]# cat /etc/at.deny
redhat
[root@localhost cron]# su - redhat   ##切換到redhat用戶進行測試
Last login: Mon Apr 13 23:46:54 CST 2020 on :0
[redhat@localhost ~]$ at now + 1min
You do not have permission to use at.   ##測試顯示沒有權限
[redhat@localhost ~]$ su - root   
Password:
Last login: Sat May  9 08:45:28 CST 2020 from gateway on pts/1
[root@localhost ~]# vim /etc/at.allow   ##添加允許列表,允許redhat用戶
##在系統中並沒有at.allow這個文件但只要你編輯這個文件再次允許你這個用戶
可以編寫計劃任務也是可以的。系統默認先是看你允許的
[root@localhost ~]# cat /etc/at.allow
redhat
[root@localhost ~]# su - redhat   ##切換用戶進行測試
Last login: Sat May  9 10:13:19 CST 2020 on pts/1
[redhat@localhost ~]$ at now + 1min  ##測試可以
at> wall haha
at> <EOT>
job 8 at Sat May  9 10:19:00 2020

crontab -e 和 vim /etc/crontab的區別

crontab -e 是當前用戶自定義的,只針對當前用戶生效,
/etc/crontab 是針對系統所有用戶生效的


[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash   #運行計劃所使用的shell 默認是bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin  #指定命令執行環境變量路徑
MAILTO=root     #MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶

# 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
28 10 * * * wall csdn     

注:當我們需要在同一時間執行的個腳本時候避免多次寫可以用 run-parts來執行
run-parts: 是一個腳本在/usr/bin/run-parts  作用就是執行一個目錄下的所有腳本/程序                                                                     ~                            

拓展計劃任務

假設當你的計劃任務應該在某個時間點執行,但由於一些因素(斷電)沒有執行那麼這個計劃任務還執不執行,什麼時候執行?
會在開機以後會開機檢查 計劃任務哪些執行哪些沒有執行,然後在指定時間內去執行

# vim /etc/anacrontab
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
(每一天開機以後5分鐘去檢查cron.daily這個腳本) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章