【講清楚,說明白!】計劃任務crontab及企業實戰應用

目錄:
(一)at計劃任務
(二)crontab計劃任務
(三)清理臨時文件數據庫


經驗豐富的系統運維工程師可使得Linux系統在無需人工介入的狀況下,在指定的時間段自動啓動或中止某些服務或命令,從而實現運維的自動化。儘管咱們如今已經有了功能強大的腳本程序來執行一些批處理工做,可是若是仍然須要在天天凌晨兩點敲擊鍵盤迴車鍵來執行這個腳本程序,這簡直太痛苦了。因此這就使得咱們能掌握如何設置服務器的計劃任務服務的方法,並擁有把週期性,規律性的工做交給系統自動完成的技能顯得尤其重要。
計劃任務分爲一次性計劃任務與週期性計劃任務。例如公司人事寫了一封放假郵件,計劃是在放假前最後一個工做日的上午10點發送全體員工,此時咱們所須要的就是一次性計劃任務。再如數據庫管理員須要在天天凌晨2點對業務數據庫進行備份,此時咱們所須要的就是經過週期性計劃任務解決這個需求。
(一)at計劃任務
(1.1)at是屬於一次性計劃任務,顧名思義,一次計劃任務只執行一次,通常用於知足臨時的工做需求。咱們可使用at命令實現這種功能,只須要寫成「at 時間」的格式就能夠了。若是想要查看已設置好但還未執行的一次性計劃任務,可使用「at -l」命令;想要將其刪除,可使用「atrm 任務序號」。在使用at命令來設置一次性計劃任務時,默認採用的是交互式方法。
(1.2)第一個使用「atq」或者「at -l」能夠來查看當前系統中全部的計劃任務的列表狀況。
# atq
# at -l
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(1.3)對於at命令的用法,咱們能夠經過「man at」命令來查看。如今咱們的需求是建立一個2019年10月27日的計劃任務(當前是26日),則咱們能夠查詢到符合本身使用習慣的日期表示方式,好比編輯在10月27日執行重啓httpd服務的計劃任務。須要注意的是,咱們當前的時間是幾點,那麼建立的計劃任務所執行的時間,也就是咱們所指定的那個日期與當前的時間點一致的時候執行。由於咱們是在2019年10月26日的20點01分建立的計劃任務,因此計劃任務執行的時間是2019年10月27日的20點01分。
# at 2019-10-27
at> systemctl restart httpd
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(1.4)在建立指定時間的計劃任務時,咱們也是能夠指定具體的時間的,精確到時、分。
# at 22:00 2019-12-12---建立一個計劃任務,設定在2019年12月12日22:00分執行
# at 4pm 2019-12-12---建立一個計劃任務,設定在2019年12月12日下午4點執行
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(1.5)若是咱們想指定3周後下午4點執行重啓http服務的指令,則可使用weeks參數;若是咱們想要3天后的上午4點執行重啓http服務的指令,則可使用days參數;若是咱們想指定2個小時後執行重啓http服務的指令,則可使用hours參數;若是咱們想指定1小時後執行刪除/root/目錄下全部以rpm爲後綴的文件,則可使用minutes參數。
# at 4pm + 3weeks
at> systemctl restart httpd
# at 4am + 3days
# at now + 2hours
# at now + 1minutes
at> rm -rf /root/*rpm
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(1.6)若是咱們想查詢具體的計劃任務的信息,可使用兩種方式進行查看,第一種是使用「at -c」命令查詢(圖1-6和圖1-7);第二種是進入到/var/spool/at目錄下進行查看計劃任務的具體內容(圖1-8和圖1-9)。
# at -c 1
# cd /var/spool/at
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(1.7)若是咱們如今須要將多餘的計劃任務刪除,則可使用「atrm」命令或者是「at -d」命令。若是咱們但願批量刪除指定的計劃任務,則可使用
# atrm 1---刪除第一個計劃任務
# at -d 2---刪除第二個計劃任務
# atrm {3..6}---刪除第3到第6個計劃任務
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(1.8)默認狀況下,系統中的普通用戶是能夠執行計劃任務的。若是咱們如今需求是但願不容許普通用戶執行計劃任務,則能夠在/etc/at.deny文件中添加用戶,例如咱們不容許tom用戶查詢和建立計劃任務,則能夠參考圖1-12。此時tom用戶已是不容許建立和查詢計劃任務了,而咱們如今又但願tom用戶可以建立個查詢計劃任務,咱們可使用兩種方式來實現,第一種是把tom用戶從/etc/at.deny文件中刪除;第二種方式是咱們建立一個/etc/at.allow文件,並將tom用戶添加進去,因爲系統默認當同一用戶同時存在/etc/at.allow和/etc/at.deny文件的時候,是/etc/at.allow文件中的設置生效(圖1-13)。
# vim /etc/at.deny
# vim /etc/at.allow
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用vim


(二)crontab計劃任務
(2.1)若是咱們但願Linux系統可以週期性的、有規律的執行某些具體的任務,那麼Linux系統中默認啓用的crond服務簡直再合適不過了。建立、編輯計劃任務的命令爲「crontab -e」,查看當前計劃任務的命令爲「crontab -l」,刪除某條計劃任務的命令爲「crontab -r」。另外,若是您是以管理員的身份登陸的系統,還能夠在crontab命令中加上-u參數來編輯他人的計劃任務。
(2.2)若是咱們想查詢當前用戶在系統中存在的計劃任務可使用「crontab -l」,若是咱們想查詢tom用戶在系統中存在的計劃任務可使用-u指明用戶。
# crontab -l---查詢當前用戶在系統中存在的計劃任務
# crontab -l -u tom---查詢tom用戶在系統中存在的計劃任務
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.3)若是咱們想要編輯當前用戶的計劃任務,則可使用「crontab -e」,若是想要對指定的用戶編輯計劃任務,則應該再加上「-u」的選項(圖2-3)。咱們在正式部署計劃任務以前,須要先默唸一下口訣「分、時、日、月、星期、命令」,這是使用crond服務設置任務的參數格式,須要注意的是,若是有些字段沒有設置,則須要使用星號(*)佔位。例如咱們如今的需求是計劃在天天上午7點整執行一個腳本DeleteLock.sh,目標是查找到/mail分區下全部後綴爲「.lock」的文件,並將這些文件清除(圖2-4至圖2-6)。
# crontab -e -u tom---指定對tom用戶建立一個計劃任務
find /mail -type f -name "*.lock" -exec rm -rf {} \;---查找到/mail分區下全部後綴爲「.lock」的文件,並將這些文件清除
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.4)若是咱們的需求是星期一到星期五上午的7點整準時執行DeleteLock.sh腳本文件,則可使用以下的三種方式來進行表示。
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.5)若是咱們如今的需求是在天天上午7點0分、5分、10分、30分執行一次DeleteLock.sh腳本文件,則可使用以下的表示方式。
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.6)如今咱們的需求是1到3月份週一至週五天天上午7點整執行DeleteLock.sh腳本文件,即表示1到3月份全部的工做日都執行該命令(圖2-9)。或者咱們的需求是1到3月份每月的1到10號上午7點整咱們都執行DeleteLock.sh腳本文件(圖2-10)。而當咱們將以上兩種狀況進行合併時,表明的並非交集,而是並集,即表示1到3月份中每月1至10號或者是全部的工做日都會執行DeleteLock.sh腳本文件(圖2-11)。
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.7)若是咱們想要查看所建立計劃任務則可使用「crontab -l」命令進行查詢。
# crontab -l---查詢全部建立的計劃任務
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.8)咱們使用crontab建立的計劃任務都是保存在/var/spool/cron/目錄下的,咱們進入到root文件中能夠查看詳細的信息。
# cd /var/spool/cron/
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.9)若是咱們有一個很複雜的業務需求,在設計計劃任務的時候也沒有必要考慮的很複雜,咱們能夠把這個複雜的需求,拆分紅多個簡單的條目來執行就能夠了。好比咱們如今的需求是每個月的最後一天凌晨2點來執行DeleteLock.sh腳本文件。咱們能夠在crontab中建立四個條目,第一條設置一、三、五、七、八、十、12月每個月31號執行DeleteLock.sh腳本;第二條設置四、六、九、11月每個月30號執行DeleteLock.sh腳本;第三條建立一個腳本在每一年的2月29日凌晨2點執行DeleteLock.sh腳本;第四條建立一個判斷腳本cc.sh,在每一年的2月1日判斷當年是不是閏年,若是是閏年則使用swd或者awk命令將日期部分設置成29號,若是不是閏年則在cc.sh腳本中使用swd或者awk命令將29號替換成28號。
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.10)在咱們系統中也是存在着不少的系統任務的,咱們進入到/etc/目錄下能夠看到cron*開頭的全部文件,其中「/etc/cron.daily」表明的是每日執行的計劃任務,「/etc/cron.hourly」表明的是每小時執行的計劃任務,「/etc/cron.monthly」表明的是每個月執行的計劃任務,「/etc/cron.weekly」表明的是每週執行的計劃任務。若是咱們想要在特定的時間執行特定的計劃任務,則能夠將編寫好的腳本放到對應的目錄當中。
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.11)若是咱們須要將建立的計劃任務刪除,則可使用「crontab -r」將root用戶建立的全部計劃任務所有刪除。
# crontab -r
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(2.12)在系統中默認是容許普通用戶建立計劃任務的,若是咱們想要限制普通用戶建立計劃任務,則能夠經過建立/etc/cron.deny文件,並填寫須要禁止的用戶名便可(圖2-18)。若是此時咱們又容許tom用戶能夠建立計劃任務,那麼咱們能夠經過兩種方式來實現,第一種是在/etc/cron.deny文件中將tom用戶刪除便可;第二種是咱們再次建立一個/etc/cron.allow文件,並將tom用戶填寫到文件中,此時咱們發現雖然/etc/cron.allow配置文件和/etc/cron.deny配置文件中都填寫了tom用戶,可是用戶同時存在時默認是以/etc/cron.allow配置文件中的信息生效(圖2-19)。
# vim /etc/cron.deny
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用服務器


(三)清理臨時文件
(3.1)在系統中不少時候會生成一些系統的臨時文件,例如在/tmp目錄下存在不少系統自動生成的文件。
# ls /tmp/
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.2)例如咱們如今的需求是將3天以前生成的系統文件所有清理掉,此時咱們先將tmpwatch命令對應的軟件安裝起來,咱們使用man tmpwatch命令能夠查看tmpwatch命令相關參數的使用方法(圖3-3),咱們將當前目錄中3天之前訪問的文件所有刪除掉(圖3-4),咱們但願將當前目錄中3小時以上時間沒有訪問的文件所有刪除,則須要加上「-f」強制刪除的選項(圖3-5)。
# yum install tmpwatch -y
# tmpwatch -u 3d .---將當前目錄中3天之前訪問的文件所有刪除掉
# tmpwatch -u 3h . -f---將當前目錄中3小時以上時間沒有訪問的文件所有刪除
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.3)固然咱們的系統中仍是有其餘清除臨時文件的工具的,在RHEL7中新增長了一個服務用來管理臨時文件的。
# systemctl list-unit-files | grep systemd-tmpfi
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.4)systemd-tmpfiles-setup.service這個服務能夠按期清理一些文件,還能夠按期建立一些必須的文件或目錄,systemd-tmpfiles要讀取本身的配置文件才能知道要清理哪些臨時文件,它須要讀取的配置文件主要是放在以下的目錄中的。
# ls /usr/lib/tmpfiles.d/---保存都是系統自動生成的文件供systemd-tmpfiles進行讀取,通常是不建議你們對其中的內容進行修改
# ls /run/tmpfiles.d/---保存都是系統守護進程產生的文件供systemd-tmpfiles進行讀取,咱們通常也是不用去修改的
# ls /etc/tmpfiles.d/---主要存放的是用戶本身管理的一些配置文件供systemd-tmpfiles進行讀取,通常咱們自定義的配置文件都是建議放在這個目錄中的
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.5)咱們在/etc/tmpfiles.d/目錄下建立一個aa.conf的配置文件,指定建立的目錄、目錄的默認權限、目錄的屬主屬組信息、超時清理文件的時間等。
# cd /etc/tmpfiles.d/
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.6)接着咱們執行systemd-tmpfiles命令時,系統便會自動建立/tmp/aa目錄(圖3-10)。接着咱們進入/tmp/aa目錄中建立一個test.txt文件,而後等10秒後執行「clean」命令,此時咱們發現/tmp/aa/目錄中的全部文件都已經清理了(圖3-11)。
# systemd-tmpfiles --clean
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.7)若是咱們在/tmp/aa目錄下再建立一個目錄rh124並在目錄中建立一個文件,而後等待10秒後從新修改目錄最後的訪問時間,接着再次去執行systemd-tmpfiles的清理臨時文件的操做。此時因爲rh124目錄沒有超過10秒,目錄中的文件testRH124.txt文件超過了10秒,執行清理文件的命令後,咱們發現rh124仍然是存在的,可是目錄下的文件testRH124.txt已經清理了。
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.8)因爲在執行「systemd-tmpfiles」相關的命令時會讀取三個目錄包括:/usr/lib/tmpfiles.d/目錄、/run/tmpfiles.d/目錄、/etc/tmpfiles.d/目錄下的全部的配置文件的信息。而若是咱們只想讀取某一個特定的配置文件進行執行,則能夠在最後指定特定的配置文件名,例如指明aa.conf,那麼就不會清理其餘配置文件中的條目。
# systemd-tmpfiles --clean aa.conf---咱們能夠加上aa.conf,指明只是執行清理aa.conf配置文件中條目
【講清楚,說明白!】計劃任務crontab及企業實戰應用
(3.9)固然咱們在/etc/tmpfiles.d/目錄下建立好aa.conf配置文件後,系統也是會按期對咱們所建立的配置文件中的條目進行清理的。在/usr/lib/systemd/system這個目錄中存放了按期執行配置文件的文件(圖3-14),例如「OnBootSec=15min」表示開機後15分鐘會執行systemd-tmpfiles-clean的操做(圖3-15)。固然/usr/lib/systemd/system目錄中包含按期執行的文件的執行範圍默認是對應/usr/lib/tmpfiles.d/目錄、/run/tmpfiles.d/目錄、/etc/tmpfiles.d/目錄下的全部的配置文件中的條目的。
# cd /usr/lib/systemd/system
# vim systemd-tmpfiles-clean.timer
【講清楚,說明白!】計劃任務crontab及企業實戰應用
【講清楚,說明白!】計劃任務crontab及企業實戰應用運維

—————— 本文至此結束,感謝閱讀 ——————ide

相關文章
相關標籤/搜索