計划任務的安排方式分兩種:
一種是定時性的,也就是例行。就是每隔一定的周期就要重復來做這個事情
一種是突發性的,就是這次做完了這個事,就沒有下一次了,臨時決定,只執行一次的任務
at和crontab這兩個命令:
at:它是一個可以處理僅執行一次就結束的指令
crontab:它是會把你指定的工作或任務,比如:腳本等,按照你設定的周期一直循環執行下去。
at一次性計划任務使用
at語法格式:at 時間
- 下載at程序
# yum install at -y
- 啟動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> <EOT> #按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