Linux任務計劃,周期性任務執行
概述
本章將為大家介紹一些任務計劃和周期性任務計劃執行相關內容
任務計劃的分類主要有由兩種
未來的某時間點執行一次某任務:at,batch
周期性運行某任務:crontab
具體分為三個方面來說明:
1、at計劃任務
2、cron計劃任務
3、mail命令
4、計劃任務作業及練習
第一章 at,batch計劃任務
at是由atd服務提供的,在Centos6智商可以使用service atd start 來啟動服務;在Centos7上要使用systemctl start atd.service來啟動服務
at的使用方法:at[OPTION]...TIME
TIME:
HH:MM[YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now+#
UNIT:minutes,hours,days,or weeks
at的作業
-l:at -l相當于atd命令,列出目前系統上面的所有當前用戶的at隊列;
-d:at -d相當于atrm命令,可以取消一個在at排程中的工作;
-v:可以使用較明顯的時間格式列出at中的工作列表;
-f:把at要執行的所有任務放置于文件中,讓at讀取此文件作為要執行的任務;
如:at -f /PATH/TO/SOMEFILE TIME
-q QUEUE:指明隊列;
-c:查看指定作業的具體內容;如下圖
注意:作業執行結果是以郵件發送給提交作業的用戶
batch命令:
batch會讓系統自行選擇在系統資源較空閑的時間去執行指定的任務;
(不用指定時間,所以這里就不多加說明)
第二章 周期性任務計劃:cron
服務程序:
cronle:主程序包,提供了crond守護進程及相關輔助工具;
確保crond守護進程(daemon)處于運行狀態
Centos6中可以使用service crond start來啟動crond服務;
Centos7可以使用systemctl start crond.service來啟動crond服務;
向crond提交作業的方式不同于at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件,要使用crontab命令;
cron任務有兩類:系統cron和用戶cron;
系統cron任務:主要用于實現系統自身的維護;
手動編輯:/etc/crontab文件
[root@localhost ~]# >>cat /etc/crontab
SHELL=/bin/bash #使用的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #到哪些文件夾尋找我們使用的到的命令
MAILTO=root #運行之后郵件發送給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
注意:
(1)每一行定義一個周期性任務;
* * * * *: 定義周期性時間
user-name: 運行任務的用戶身份
command to be executed:要執行的任務
(2)此處的環境變量不同于用戶登錄后獲得的系統變量,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;
(3)執行結果郵件發送給MAILTO指定的用戶
用戶cron任務:
命令:crontab命令
用戶cron的配置格式:/var/spool/cron/USERNAME
SHELL=/bin/bash #使用的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #到哪些文件夾尋找我們使用的到的命令
MAILTO=USERNAME #運行之后郵件發送給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
# | | | | |
# * * * * * command to be executed
注意:
(1)每行定義一個cron任務,共6個字段
(2)此處的環境變量不同于用戶登錄后獲得的系統變量,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;
(3)執行結果郵件發送給當前用戶
時間表示法:
(1)特定值;
給定時間點有效取值范圍內的值;
注意:day of week和day of month一般不同時使用;
(2)*
給定時間點上有效取值范圍內的所有值;表"每..."
(3)離散取值:
在時間點上使用逗號分隔的多個值;
#,#,#
(4)連續取值:-
在時間點上使用-連接開頭和結束
#-#
(5)在指定時間點上,定義步長;
/#: #即步長;
注意:
(1)指定的時間點不能被步長整除時,其意義將不復存在;
(2)最小時間單位為"分鐘",想完成"秒"級任務,得需要額外借助與其他機制;
定義成每分鐘任務:而在利用腳本實現在每分鐘之內,循環執行多次;
示例:
(1)3 * * * *:每小時執行執行一次;每小時的第3分鐘;
(2)3 4 * * 5:每周執行一次;每周五的4點3分;
(3)5 6 7 * *:每月執行一次;每月的7號的6點5分;
(4)7 8 9 10 *:每年執行一次;每年的10月9號8點7分
(5)9 8 * * 3,7:每周三和周日;每周三和周日的8點3分執行一次
(6)0 8,20 * * 3,7:每周三和周日的8點和20點執行一次
(7)0 9-18 * * 1-5:每周一到周五的9點到18點每小時執行一次
(8)*/5 * * * *:每5分鐘執行一次任務;
(9)*/7
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-e:編輯任務;
-l:列出所有任務;
-r:移除所有任務;即刪除/var/spool/cron/USERNAME文件;
-i:在使用-r選項移除所有任務時提示用戶確認;
-u user:root用戶可為指定用戶管理cron任務
注意:運行結果以郵件通知給當前用戶;如果拒絕接受郵件;
(1)COMMAND > /dev/null
(2)COMMAND &> /dev/null
注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%不用轉義亦可;
如果某任務在指定的時間因關機未能執行,下次開機是不會自動執行,如果期望他能夠繼續自動執行;可使用anacron實現;
第三章 mail命令
mail命令:mailx -send and recelve Internet mail
MUA:Mail User Agent,用戶收發郵件的工具程序;
mailx [-s 'SUBJECT'] username[@hostname]
郵件正文的生成:
(1)交互式的輸入;單獨成行可以表示正文結束;Ctrl+d提交亦可;
(2)通過輸入重定向;
(3)通過管道;
第四章 計劃任務作業及練習
1、每天的2點和12點整,將/etc備份至/testdir/backup目錄中,保存的文件名稱格式為“etcbak-yyyy-mm-dd-HH.tar.xz”
2、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
3、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
4、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高于80%,就執行wall警報
原創文章,作者:Kartik,如若轉載,請注明出處:http://www.www58058.com/49539