計劃任務及其相關命令
阿新 • • 發佈:2018-02-14
電腦 即使 它的 crontab 開機 優先級 執行 options 周期
Linux 計劃任務的分類:
一次性任何計劃:
未來的某時間點執行一次任務
at:專門用來處理一次性任務計劃
batch :系統自行選擇空閑時間去執行此處指定的任務
周期性的任務計劃:
周期性運行某任務
crontab :可以根據定義的周期信息,循環的去做些事情
at 計劃任務
at 是由atd服務提供的,依賴與atd 服務, 需要啟動才能實現at 任務 在centos6上可以用service atd start來啟動服務 在centos7上要使用systemctl start atd.service 來啟動服務 使用的命令:at 執行方式: 1)交互式 2)輸入重定向 3)at –f 文件 at 隊列存放在/var/spool/at 目錄中 /etc/at.{allow,deny} 控制用戶是否能執行at任務 白名單: /etc/at.allow 默認不存在,只有該文件中的用戶才能執行at 命令 有了白名單,就不看黑名單了。 黑名單: /etc/at.deny 默認存在,拒絕該文件中用戶執行at命令, 而沒有在at.deny 文件中的使用者則可執行 如果兩個文件都不存在,只有root可以執行at命令 at命令 at, batch, atq, atrm - queue, examine or delete jobs for later execution at,用於在指定時間點執行命令 atq,列出用戶的待做任務,除了超級用戶root atrm,刪除任務,通過工作編碼來識別 batch,當負載平衡水平掉到0.8後執行命令 at [-V] [-q x] [-f file] [-mMlbv] timespec ... at [-V] [-q x] [-f file] [-mMlbv] -t time at -c job ... at [ -rd ] job ... atq [-V] [-q x] atrm [-V] job ... batch -v: 可以使用較為明顯的時間格式列出at中的工作列表 -l: 列出目前系統上面所用當前用戶的at隊列,相當於atq -d: 可以取消一個在at排程中的工作,刪除指定的作業;相當於atrm -c: 查看具體作業任務。也就是查看/var/spool/at 目錄下對應的內容 -f /path/from/somefile : 把at要執行的所有任務放置在文件中,讓at讀取此文件作為要運行的任務。 -m: 當任務被完成之後,將給用戶發送郵件,即使沒有標準輸出 ctrl + d 或者 ctrl +\ 來正常執行退出 ctrl + c 來取消這次任務 -q queue 使用指定的隊列 -M 不發送郵件給用戶 -t time 在time時間運行任務,格式為[[CC]YY]MMDDhhmm[.ss] -r 相當於atrm -b 相當於batch at讀取標準輸入stdin,所以可以用標準重定向的各種方法來進行at的讀取設置 註意: 作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶 TIME: 定義出什麽時候進行 at 這項任務的時間 HH:MM HH:MM [YYYY-mm-dd] HH:MM [am|pm] [Month] [Date] HH:MM [am|pm] + number[minutes|hours|days|weeks] noon(中午12點), midnight, teatime(4pm) tomorrow now+#{minutes,hours,days, OR weeks} HH:MM 02:00 在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務 HH:MM YYYY-MM-DD 02:00 2016-09-20 規定在某年某月的某一天的特殊時刻進行該項任務 HH:MM[am|pm] [Month] [Date] 04pm March 17 17:20 tomorrow HH:MM[am|pm] + number [minutes|hours|days|weeks] 在某個時間點再加幾個時間後才進行該項任務 now + 5 minutes 02pm + 3 days
cront計劃任務
crontab是由crond服務提供的 centos6中可以使用service crond start 來啟動crond 服務, centos7中要使用systemctl restart crond.service 來啟動服務。 使用命令:crontab,crond 程序包: cronie: 主程序包,提供crond守護進程及相關輔助工具 cronie-anacron : cronie 的補充程序,用於監控cronie任務執行狀況, 如cronie中的任務在過去該運行的時間點未能正常運行,則anacron 會隨後啟動一次此任務 crontabs : 包含CentOS提供系統維護任務 確保crond 守護處於運行狀態: systemctl status crond service crond status 計劃周期性執行的任務提交給crond,到指定時間會自動運行 系統cron任務: 系統級別的例行性任務計劃,它的制定是通過編輯以下配置文件來實現 /etc/crontab 用戶cron任務: crontab 命令定義 每個用戶都有專用的cron任務文件 /var/spool/cron/USERNAME 日誌路徑: /var/log/cron 系統cron任務文件/etc/crontab的用法 詳情參見 man 4 crontab # 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 @reboot run once after reboot. @yearly 0 0 1 1 * @annually 0 0 1 1 * @monthly 0 0 1 * * @weekly 0 0 * * 0 @daily 0 0 * * * @hourly 0 * * * * 前面5個*表示對應的時間點 user-name:用戶身份 command:要運行的任務 註意: 建議在定義cron任務時,所用到命令使用絕對路徑;如果是腳本,腳本中的命令使用絕對路徑,或自定義一個擁有完整路徑的環境變量 對於cron任務來講,% 有特殊用途,如果在命令中要使用%,則需要轉義‘\’,或將% 放置於單引號中,則可不用轉義。 時間表示法: 特定值 給定時間點有效取值範圍內的值 * 給定時間點上有效取值範圍內的所有值 表示“每...” 離散取值 #,#,# 連續取值 #-# 在指定時間範圍上,定義步長 */#: #即為步長,每#個時間單位一次 時間格式 從左往右,第一個*點出現的位置就是按照這個對應的時間點進行計算。 @reboot run once after reboot. @yearly 0 0 1 1 * @annually 0 0 1 1 * @monthly 0 0 1 * * @weekly 0 0 * * 0 @daily 0 0 * * * @hourly 0 * * * * 0 ***** : 系統的計劃任務 /etc/crontab /etc/cron.d/ ##配置文件 /etc/cron.hourly/ ##腳本 /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ 控制用戶執行計劃任務 /etc/cron.{allow,deny} allow的優先級高於deny,不被放到allow裏面,就沒有權限使用crontab。 當allow和deny都沒有時,只有root用戶有權限使用crontab 示例: 晚上9點10分運行echo 命令 10 21 * * * centos /bin/echo "Howdy!" 每3小時echo 和wall 命令 0 */3 * * * centos /bin/echo “howdy”;/usr/bin/wall “welcome to Magedu!” 思考: 如何在秒級別運行任務? * * * * * for min in 0 1 2; do echo "hi"; sleep 20;done 如何實現每7分鐘運行一次任務? crontab命令 crontab - maintains crontab files for individual users crontab [options] file crontab [options] crontab -n [hostname] -u <user> 定義用戶 -e 編輯用戶crontab任務 -l 列出用戶crontab任務 -r 刪除用戶的 -i 在刪除之前進行提示 -n <host> 在集群中設置主機來運行用戶的crontab任務 -c 在集群中獲取主機來運行crontab任務 -s selinux 內容上下文 -x <mask> 激活詳情 註意: 若需要刪除一個任務,則需要通過編輯界面刪除行實現
at和crontab的對比
用一次性作業使用 at,重復性作業使用crontab
root用戶能夠修改其它用戶的作業
Create at time crontab -e
List at -l crontab -l
Details at -c jobnum N/A
Remove at -d jobnum crontab -r
Edit N/A crontab -e
運行結果的重定向
沒有被重定向的輸出會被郵寄給用戶,運行結果的標準輸出和錯誤以郵件通知給相關用戶 重定向: COMMAND > /dev/null COMMAND &> /dev/null COMMAND >/dev/null 2>&1 /dev/null:軟件模擬的設備,bit bucket,數據黑洞。
anacron系統
anacron處理斷電期間沒能執行的cron任務,anacron並不是用來取代crontab。
anacron解決一些非24小時在線的linux系統上的crontab無法正常運行的問題。
anacron並不能指定何時運行某項任務,而是以天為單位或在啟動後立刻進行anacron的動作,它會檢查停機期間應該進行但並沒有進行的crontab任務,並將該任務運行一遍後,anacron就會自動停止。
anacron會記錄上次anacron執行的時間,anacron會去分析現在的時間與記錄上次運行anacron的時間,再次比較後若發現有差異,那就在某些時刻沒有進行計劃任務了,此時anacron就會開始運行未進行的crontab任務,所以anacron其實也是通過crontab來運行的。
anacron是一個程序,而非一個服務。
運行計算機關機時cron不運行的任務,CentOS6 以後版本取消anacron服務,由crond服務管理
對筆記本電腦、臺式機、工作站、偶爾要關機的服務器及其它不一直開機的系統很重要很有用
配置文件:
/etc/anacrontab ,負責執行/etc/ cron.daily、/etc/cron.weekly、/etc/cron.monthly 中系統任務。
字段1 :如果在這些日子裏沒有運行這些任務……
字段2 :在重新引導後等待這麽多分鐘後運行它
字段3 :任務識別器,在日誌文件中標識
字段4 :要執行的任務
由/etc/cron.hourly/0anacron 執行
當執行任務時,更新/var/spool/anacron/cron.daily 文件的時間戳
計劃任務及其相關命令