1、概念:未來的某時間點執行一次某任務或者週期性的執行某個任務,執行結果會通過郵件的形式傳送給使用者
2、可將其分為兩類:
(1)定點執行一次某任務:at,batch
(2)週期性的執行某任務:crontab
1.1 使用者及系統定時任務
crond是linux下用來週期性的執行某種任務或等待處理某些事件的乙個守護程序,與windows下的計畫任務類似,可以使用命令:service crond status (centos6);systemctl status crond (centos7)進行檢視。
crond程序定期(每分鐘)檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。使用者在cron表(也稱為crontab檔案)指定定時任務,crontab也就是常見的定時任務設定命令。linux下的任務排程分為兩類,系統任務排程和使用者任務排程。
系統任務排程:系統週期性所要執行的工作,比如寫快取資料到硬碟、日誌清理等。/etc/crontab檔案就是系統任務排程的配置檔案。
使用者任務排程:使用者定期要執行的工作,比如使用者資料備份、定時郵件提醒等。使用者可以使用crontab工具來定製自己的計畫任務。所有使用者定義的crontab檔案被儲存在/var/spool/cron目錄中。
1.2 定時任務語法
先了解一下mail命令,因為我們所有的定時任務在執行結束後都會通過郵件通知。
使用mail發郵件時,必須先將sendmail服務啟動。
mail -s 「郵件主題」 -c 「抄送位址」 -b 「密送位址」 -f 傳送人郵件位址 -f 發件人姓名 < 要傳送的郵件內容
1、at命令:
計畫任務,在特定的時間執行某項工作,在特定的時間執行一次,需要安裝at服務,apt-get install at
1、時間定義
hh:mm 12:00
midnight(深夜)noon (中午) teatime(飲茶時間,一般是下午4點)
am pm 8am 9pm
2019-8-11 2019/8/11
+ 5 minutes hours days weeks
today tomorrow
2、語法結構
at 選項 引數
-q:列出任務
-f :從檔案中讀取
-l :列出任務
-d:指定刪除
-v:列出已執行未刪除的任務
-v:印出版本編號
-c:檢視作業內容
at:在特定的時間執行一次性的任務
atq:列出使用者的計畫任務
atrm:根據任務號刪除at任務
batch:在系統負荷允許的情況下執行at任務,即在系統空閒的情況下才執行at任務
3、示例:
[root@localhost ~]# at now +3 minutes #3分鐘後執行
at> echo 「hello」 #輸入任務
at> #ctrl+d會直接退出
job 1 at 2019-08-06 15:58
[root@localhost ~]# atq #檢視待處理作業
1 2019-08-06 15:58 a root
[root@localhost ~]# at now +7 minutes #7分鐘後執行
at> echo 「hello」
at>
job 2 at 2019-08-06 16:03
[root@localhost ~]# atq #檢視待處理作業
2 2019-08-06 16:03 a root
1 2019-08-06 15:58 a root
[root@localhost ~]# atrm 2 #刪除待處理作業
[root@localhost ~]# at -c 3 #根據作業id檢視作業內容
#!/bin/sh
#atrun uid=0 gid=0
#mail root 0
umask 22
hostname=localhost.localdomain; export hostname
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
cd /root ||
$ << 『marcindelimiter63bd06f2』
echo 「world」>1.txt
marcindelimiter63bd06f2
2、cron命令
1、在/etc目錄下有乙個crontab檔案,這個就是系統任務排程的配置檔案。
[root@localhost ~]# 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
每行定義乙個週期性任務,共7個字段;
#使用者任務排程:使用者定期要執行的工作。可以使用crontab工具來定製自己的計畫任務。所有使用者定義的crontab檔案被儲存在/var/spool/cron目錄中。其檔名與使用者名稱一致。
示例:5 * * * * 每小時的第五分鐘執行一次
3 4 * * 5 每週的4時3分執行一次
5 6 7 * * 每月的7號的6時5分執行一次
7 8 9 10 * 每年10月9日8時7分執行一次
*/5 * * * * 每隔五分鐘執行一次
2、crontab命令
service crond start:啟動服務
service crond stop:關閉服務
service crond restart:重啟服務
service crond reload:重新載入配置
service crond status:啟動服務
選項:-e:編輯任務
-l:列出所有任務
-r:移除所有任務
-i:在使用-r選項移除所有任務時提示使用者確認
-u user:root使用者可為指定使用者管理cron任務
3、計畫任務規範:
1、指令碼要規範,指令碼存放位置要規範,便於維護
2、定時任務要寫注釋
3、執行的指令碼要帶絕對路徑
4、執行結果的標準輸出或者錯誤輸出 >/dev/null
5、可以以命令完成的任務,也要寫在指令碼
6、分使用者執行
Linux定時(計畫)任務
未來的某時間點執行一次某任務或者週期性的執行某個任務,執行結果會通過郵件的形式 傳送給使用者分類 1 定點執行一次某任務 at,batch 2 週期性的執行某任務 crontab 1 mail命令 mail s 郵件主題 c 抄送位址 b 密送位址 f 傳送人郵件位址 f 發件人姓名 要傳送的郵件內...
MySQL定時計畫任務
5.1版本以後,mysql支援定時執行 event 的功能,就跟linux的crontab差不多。一 先檢視一下你的msyql版本,查詢版本資訊的sql語句 sql select version 確定版本支援之後,再檢視一下event是否開啟 二 檢視是否開啟event 1 mysql event功...
ansible windows 定時計畫任務
ansible使用win shell模組執行windows命令。ansible all m win shell a schtasks create sc daily tn restart tr c windows system32 shutdown.exe r f t 1 st 02 00 建立定時...