Linux計劃任務——at和crontab詳解

計劃任務介紹

計劃任務的安排方式分兩種:

  • 一種是定時性的,也就是例行。就是每隔一定的週期就要重複來做這個事情
  • 一種是突發性的,就是這次做完了這個事,就沒有下一次了,臨時決定,只執行一次的任務

at和crontab這兩個命令:

  • at:它是一個可以處理僅執行一次就結束的指令
  • crontab:它是會把你指定的工作或任務,比如:腳本等,按照你設定的週期一直循環執行下去。

一、一次性計劃任務使用:at

at語法格式:at 時間

1、下載at程序

yum install at -y

2、啓動atd服務

systemctl restart atd

查看一下進程

ps aux | grep atd
root 1166 0.0 0.1 25904 944 ? Ss 17:52 0:00 /usr/sbin/at -f root 1168 0.0 0.1 112704 956 pts/0 S+ 17:52 0:00 grep –color=auto atd

3.設置at計劃任務

[root@localhost ~]# at 15:20
at> touch /home/he/tttt.txt
at> #按ctrl d 保存
job 3 at Mon May 13 15:20:00 2019
[root@localhost ~]# atq #查看計劃任務
3 Mon May 13 15:20:00 2019 a root

[root@localhost ~]# ls /home/he
b e1.txt e.txt [-p] ss.txt text tttt.txt yunwei yw.txt

已經在計劃時間執行了計劃任務。

4、刪除計劃任務

[root@localhost ~]# at 16:11
at> touch /home/he/ttt.txt
at> <EOT>
job 2 at Mon May 13 16:11:00 2019
[root@localhost ~]# atq
2 Mon May 13 16:11:00 2019 a root            #獲取任務編號。
[root@localhost ~]# atrm 2
[root@localhost ~]# atq
[root@localhost ~]#

現在你會發現已經沒有這個任務編號了。

5.at計劃任務的特殊寫法

[root@ken ~]# at 20:00 2018-10-1       #在某天
[root@ken ~]# at now +10min    	       #在10分鐘後執行
[root@ken ~]# at 17:00 tomorrow        #明天下午5點執行
[root@ken ~]# at 6:00 pm +3 days       #在3天以後的下午6點執行

二、定時任務的使用crontab

語法:#crontab -u -e

常用選項:

  • -l:list,列出指定用戶的計劃任務列表
  • -e:edit,編輯指定用戶的計劃任務列表
  • -u:user,指定的用戶名,如果不指定,則表示當前用戶
  • -r:remove,刪除指定用戶的計劃任務列表

查看進程是否啓動:

[root@localhost ~]# ps aux|grep crond
root      1020  0.0  0.1 126220  1220 ?        Ss   15:01   0:00 /usr/sbin/crond -n
root      5601  0.0  0.0 112664   972 pts/0    S+   15:30   0:00 grep --color=auto crond

查看計劃任務:

[root@localhost ~]# crontab -l
no crontab for root

編寫計劃任務:

計劃任務的規則語法格式,以行爲單位,一行爲一個計劃:

分 時 日 月 周 需要執行的命令

執行的命令建議寫成絕對路徑的格式!

取值範圍(常識):

  • 分:0~59
  • 時:0~23
  • 日:1~31
  • 月:1~12
  • 周:0~7,0和7表示星期天

四個符號:

*:表示取值範圍中的每一個數字
-:做連續區間表達式的,要想表示1~7,則可以寫成:1-7
/:表示每多少個,例如:想每10分鐘一次,則可以在分的位置寫:*/10
:表示多個取值,比如想在1點,2點6點執行,則可以在時的位置寫:1,2,6
[root@localhost ~]# crontab -e

輸入上面的命令編輯定時任務,相當於打開了一個vim編輯器。

問題1:每月1、10、22日的4:45重啓network服務

45  4  1,10,22  *  *  systemctl restart network (每月,周沒有制定)

問題2:每週六、週日的1:10重啓network服務

10  1  *  *  6,7  systemctl restart network   (日、月沒有指定)

問題3:每天18:00至23:00之間每隔30分鐘重啓network服務

*/30  18-23  *  *  *  systemctl restart network  ( 日 月 周 沒有指定)

問題4:每隔兩天的上午8點到11點的第3和第15分鐘執行一次重啓

3,15  8-11  */2  *  *  reboot   (月和周沒有指定)

如果要刪除命令:

[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root

案例:

真實測試案例,每1分鐘往root家目錄中的ken.txt中輸一個123,爲了看到效果使用追加輸出

[root@ken ~]# crontab -e         #編寫計劃任務

* * * * * echo “123” >> /root/ken.txt

[root@ken ~]# tail -f ken.txt      #查看計劃任務執行結果 123 123
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章