博文結構 什麼是例行性工做調度 僅執行一次的工做調度 循環執行的例行性工做調度 可喚醒停機期間的工做任務
一.什麼是例行性工做調度?數據庫
(1)兩種工做調度方式apache
一種是例行性的,就是每隔必定的週期要來辦的事項
一種是突發性的,就是此次作完之後就沒有的那一種bash
(2)Linux下面達到這倆個功能網絡
at :at 是個能夠處理僅執行一次就結束調度的指令,不過要執行 at 時, 必需要有 atd 這個服務 的支持才行。在 某些新版的 distributions 中,atd 可能默認並無啓動,那麼 at 這個指令就會失效呢!不過咱們的 CentOS 默認是啓動的! dom
crontab :crontab 這個指令所設置的工做將會循環的一直進行下去! 可循環的時間爲分鐘、小時、每週、每個月或每一年等。 crontab 除了可使用指令執行外,亦可編輯 /etc/crontab 來支持。 至於讓 crontab 能夠生效的服務則是 crond 這個服務ide
(3)基本上 Linux 系統常見的例行性任務有工具
進行登錄文件的輪替
登陸文件分析logwatch的任務(主動分析登陸信息工具)
建立locate的數據庫(經過已經存在的文件名數據庫來進行系統上文件名的查詢)
Man page查詢數據庫的建立(對應man page的數據庫)
RPM軟件登陸文件的建立(因爲軟件的常常變動,系統自動追蹤)
移除暫存盤
與網絡服務有關的分析行爲(eg:apache登陸文件)ui
[root@localhost ~]# systemctl start atd \\啓動atd服務 [root@localhost ~]# systemctl enable atd \\設置開機自啓
(4)at 的工做狀況:url
先找尋 /etc/at.allow 這個文件,寫在這個文件中的使用者才能使用 at ,沒有在這個文件中的使用者則不能使用 at (即便沒有寫在 at.deny 當中);
若是 /etc/at.allow 不存在,就尋找 /etc/at.deny 這個文件,若寫在這個 at.deny 的使用者則不能使用 at ,而沒有在這個 at.deny 文件中的使用者,就可使用 at 咯;
若是兩個文件都不存在,那麼只有 root 可使用 at 這個指令code
經常使用參數以下:
[root@localhost ~]# at now +5 minutes \\過5分鐘後將root下得文件寄給本身 at> /bin/mail -s :testing at job" root < /root/.bashrc \\ctrl + d 保存 at> <EOT> job 1 at Tue Nov 26 13:42:00 2019
[root@localhost ~]# atq \\查看後臺得進程 1 Tue Nov 26 13:42:00 2019 a root [root@localhost ~]# at -c 1 查看任務詳細信息 #!/bin/sh atrun uid=0 gid=0 #mail root 0 umask 22 XDG_VTNR=1; export XDG_VTNR SSH_AGENT_PID=11988; export SSH_AGENT_PID XDG_SESSION_ID=1; export XDG_SESSION_ID HOSTNAME=localhost.localdomain; export HOSTNAME IMSETTINGS_INTEGRATE_DESKTOP=yes; export IMSETTINGS_INTEGRATE_DESKTOP GPG_AGENT_INFO=/run/user/0/keyring/gpg:0:1; export GPG_AGENT_INFO SHELL=/bin/bash; export SHELL XDG_MENU_PREFIX=gnome-; export XDG_MENU_PREFIX VTE_VERSION=3804; export VTE_VERSION HISTSIZE=1000; export HISTSIZE 略。。。。。
[root@localhost ~]# at 23:00 2019-11-26 \\11月26號晚上11點關機 at> /bin/sync at> /bin/sync at> /sbin/shuwdown -h now \\ctrl + d 結束保存
[root@localhost ~]# atq 3 Tue Nov 26 23:00:00 2019 a root [root@localhost ~]# atrm 3 \\刪除任務 [root@localhost ~]# atq [root@localhost ~]#
二.循環執行的工做調度
[root@localhost ~]# crontab -e 進入文本編輯任務
選項與參數以下:
-u: 只有root才能進行這個任務,幫其餘建立,移除工做調度 -e: 編輯crontab的工做內容 -l : 查閱crontab的工做內容 -r : 移除全部的crontab的工做內容
舉例:
[root@localhost ~]# crontab -e crontab: no changes made to crontab [root@localhost ~]# crontab -l 分鐘 小時 日期 月份 週期 指令 0 * * * * /usr/ls [root@localhost ~]# \\表明每個月天天每小時的第 0 分鐘執行一次 /bin/ls * \\表明每
三.什麼是 anacron
因爲 anacron 默認會以一天、七天、一個月爲期去偵測系統未進行的 crontab 任務,所以對於某些特殊的使用環境很是有 幫助。 舉例來講,若是你的 Linux 主機是放在公司給同仁使用的,由於週末假日你們都不在因此也沒有必要打開, 所以你的 Linux 是週末都會關機兩天的。可是 crontab 大多在天天的凌晨以及週日的早上進行各項任務, 恰恰你又關機了,此時系統不少 crontab 的任務就沒法進行。 anacron 恰好能夠解決這個問題
那麼 anacron 又是怎麼知道咱們的系統啥時關機的呢?這就得要使用 anacron 讀取的時間記錄文件 (timestamps) 了! anacron 會去分析如今的時間與時間記錄文件所記載的上次執行 anacron 的時間,二者比較後若發現有差別, 那就是在某些時刻沒 有進行 crontab 囉!此時 anacron 就會開始執行未進行的 crontab 任務了
經常使用參數以下:
crond 與 anacron 的關係:
crond 會主動去讀取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,並依據「分、時、日、月、周」的時間設置去各項工做調度; 根據 /etc/cron.d/0hourly 的設置,主動去 /etc/cron.hourly/ 目錄下,執行全部在該目錄下的可執行文件; 由於 /etc/cron.hourly/0anacron 這個指令檔的緣故,主動的每小時執行 anacron ,並調用 /etc/anacrontab 的配置文件; 根據 /etc/anacrontab 的設置,依據天天、每週、每個月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 內的可執行文 件,以進行固定週期須要執行的指令。