計劃任務介紹
計劃任務的安排方式分兩種:
- 一種是定時性的,也就是例行。就是每隔一定的週期就要重複來做這個事情
- 一種是突發性的,就是這次做完了這個事,就沒有下一次了,臨時決定,只執行一次的任務
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