計劃任務分爲兩種:
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私房菜》第四版