計劃任務

計劃任務分爲兩種:

1.突發性的任務,只執行一次,使用at

2.例行性的任務,循環執行,使用crontab

一、at

需要atd服務的支持。

sudo apt install at//Ubuntu需要安裝atd服務

systemctl restart atd 重新啓動atd服務

systemctl enable atd 開機自啓動atd

systemctl status atd 查看一下atd目前的狀態

atd的運行方式

at命令來產生計劃任務,並將這個任務以文本文件的形式寫入/var/spool/at目錄內

使用/etc/at.allow與/etc/at.deny來限制at命令

1)先判斷/etc/at.allow這個文件是否存在,若存在只有寫在這個文件中的用戶才能使用at,否則不能使用(即使該用戶沒有寫在at.deny中)。

2)若/etc/at.deny不存在,就查找/etc/at.deny文件,在該文件中出現的用戶不能使用at,沒有在這個文件中出現的用戶可以使用at

3)若兩個文件都不存在,則只有root可以使用at這個命令。

Cracker程序往往會利用計劃任務來執行或蒐集系統消息並定時返回給Cracker團體。

at的優點:可以將at任務獨立出你bash環境,直接交給atd程序來接管。

二、contab

需要cron服務的支持

其中/etc/cron.allow與/etc/cron.deny與at類似

crontab命令來產生計劃任務,並將這個任務以文本文件的形式寫入/var/spool/cron目錄內,而且是以賬號作爲判斷依據的。例如:dmtsai使用crontab之後,它的任務會被記錄到/var/spool/cron/dmtsai中。

不要使用vi直接編輯該文件,可能會由於輸出語法的錯誤導致無法執行cron。使用crontab -e來添加例行任務

cron執行的每個任務會被記錄到/var/log/cron這個日誌文件中,是否被植入木馬程序可以在這裏看到。

在周的那個數字中0和7都是週日的意思

crontab -e是針對用戶的cron來設計的,如果執行系統的例行性任務只需編輯/etc/crontab這個文件就行。

crontab -e這個crontab其實是/usr/bin/crontab這個執行文件,但是/etc/crontab是一個純文本文件。

cron服務讀取配置文件的位置

一般來說,crond默認會有三個地方執行腳步配置文件:

/etc/crontab

/etc/cron.d/*

/var/spool/cron/*

和系統運行有關係的兩個配置文件是/etc/crontab文件以及/etc/cron.d/*目錄內的文件,

用戶自己的任務有關係的配置文件是/var/spoll/cron/內的文件。

總結:

1)個人化的行爲使用『 crontab -e 』
如果你是依據個人需求來建立的例行工作排程,建議直接使用 crontab -e來建立你的工作排程較佳! 這樣也能保障你的指令行爲不會被大家看到 (/etc/crontab 是大家都能讀取的權限喔!);

2)系統維護管理使用『 vim /etc/crontab 』
如果你這個例行工作排程是系統的重要工作,爲了讓自己管理方便,同時容易追蹤,建議直接寫入 /etc/crontab 較佳!

3)自己開發軟件使用『 vim /etc/cron.d/newfile 』:如果你是想要自己開發軟件,那當然最好就是使用全新的配置文件,並且放置於 /etc/cron.d/ 目錄內即可。

4)固定每小時、每日、每週、每天執行的特別工作:如果與系統維護有關,還是建議放置到 /etc/crontab 中來集中管理較好。 如果想要偷懶,或者是一定要再某個週期內進行的任務,也可以放置到上面談到的幾個目錄中,直接寫入指令即可!

需要注意

1)資源分配

2)利用數據流重定向,將不需要的結果輸出到/dev/null垃圾桶中

3)周與日月不可以共存

三、anacron

anacron的存在是爲了處理非24小時運行的Linux系統所執行的crontab,以及由於某些原因導致的超過時間而沒有被執行的任務

anacron本質上是一個程序並非服務。

該程序是會週期執行的,會存在於/etc/cron.hourly或/etc/cron.daily或/etc/cron.monthly或/etc/weekly中。

Ubuntu中,anacron最快每一天執行一次,其配置文件不放置在/etc/cron.hourly中。但是在CentOS中就是存在於/etc/cron.houly中,會每小時執行一個anacron。

anacron的配置文件是/etc/anacrontab

 

總結:

1)crond會主動讀取/etc/crontab、/var/spool/cron/*、/etc/cron.d/*等配置文件,並根據分、時、日、月、周的時間去配置各項計劃任務;

2)根據/etc/cron.d/0hourly的設置,主動去/etc/cron.hourly/目錄下,執行所有在該目錄下的執行文件;(在Ubuntu下是沒有0hourly該文件,/etc/cron.hourly/下是沒有任何文件的)

3)因爲/etc/cron.hourly/0anacron這個腳本的緣故,主動地每小時執行anacron,並調用/etc/anacrontab的配置文件;

4)根據/etc/anacrontab的設置,根據每天,每週,每月地去分析/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/內的執行文件,以執行固定週期需要執行的命令。

所以在/etc/crontab中放置的操作,一旦過期了,並不會重新執行;但是/etc/cron.weekly/目錄下,那麼該任務就會固定一週內執行一次。


參考《鳥哥的Linux私房菜》第四版

發佈了63 篇原創文章 · 獲贊 71 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章