今天項目用到了,Linux計劃任務,從網上找了基本blog看了,總結了下。html
Linux 下的計劃任務有atd和crond兩種計劃任務。atd服務使用的at命令只能執行一次,而crond服務使用的crontab定義的命令,是循環做用的。在此,咱們總結的爲後者。java
一、crond服務的基本命令
crond服務爲Linux的內置服務,系統默認不自動啓動,須要人工啓動。
命令:linux
/sbin/service crond start //啓動服務 /sbin/service crond stop //關閉服務 /sbin/service crond restart //重啓服務 /sbin/service crond reload //從新載入配置
另外: init.d/crond restart/start/stop/reloadshell
自啓動配置:
在/etc/rc.d/rc/local 腳本的末尾加上:windows
/sbin/service crond start
2.計劃任務的編寫
系統支持兩種方式:1) 直接編寫計劃任務---->>>我的執行的工做
2) 使用目錄方式,編寫,即直接在 /etc/crontab 文件中編寫----->>>系統執行的工做
默認狀況下,系統中能夠登錄的用戶,均可以使用crontab定義計劃任務。不過,能夠經過下面兩個文件限制權限:
/etc/cron.allow:
將可使用 crontab 的帳號寫入其中,若不在這個檔案內的使用者則不能使用 crontab;
/etc/cron.deny:
將不可使用 crontab 的帳號寫入其中,若未記錄到這個檔案當中的使用者,就可使用 crontab。
1)直接編寫計劃任務
此種任務屬於我的執行的工做。是某個用戶按期要作的工做,例如每隔10分鐘檢查郵件服務器是 否有新信,這些工做可由每一個用戶自行設置
命令:緩存
crontab [-u username] [-l|-e|-r] 參數: -u :經過-u幫其它使用者創建/移除 crontab; -e :編輯 crontab 的內容 -l :查看 crontab 的內容 -r :移除 crontab 的全部內容(是所有的內容,若是隻是刪除某個,用-e編輯便可)
編寫本用戶下的計劃任務文件: crontab -u 當前用戶名 -e
編輯的是/var/spool/cron下對應用戶的cron文件,亦可另外指定cron文件。
如,編寫好cron文件cron_demo,把它放在/home/kjgl/bin/ 下,則命令能夠這麼寫:
crontab -u kjgl /home/kjgl/bin/cron_demo
啓動服務的命令:init.d/crond restart 或/sbin/service crond restart
格式:bash
* * * * * 命令 前面的五個*號,表示分、時、日、月、周,如: 表明意義 分鐘 小時 日期 月份 周 數字範圍 0-59 0-23 1-31 1-12 0-7 *號表明任什麼時候間都接受的意思,任意。 *號之間用空格分開, 若是是一段範圍,用「-」號鏈接; 若是是隔開幾個時間,用「,」號表示。 另外,命令必須是編寫計劃任務的用戶有權限執行的,而且最後用絕對路徑。 例如: #crontab -e 59 23 1 5 * mail linuxing < /home/test.txt 每在5月1日,23點59分就把/home/test.txt的內容做爲郵件發給linuxing用戶 */5 * * * * /opt/test.sh 每5分鐘就執行一次/opt/test.sh腳本 0 3,6 * * * /usr/local/bin/test.sh 每在3點和6點整點都執行/usr/local/bin/test.sh命令 0 8-12 * * * /root/backup.sh 8 點到 12 點之間的每小時的0分都執行/root/backup.sh
2)、基於目錄的方式執行計劃任務
此種任務爲系統執行的工做。系統週期性所要執行的工做,如備份系統數據、清理緩存
對於系統的計劃任務,已經在/etc/crontab裏面定義,採用的就是基於目錄的方式。系統會定時讀取該文件,並根據裏面的定義執行命令。
命令:
vi /etc/crontab
格式:
服務器
SHELL=/bin/bash #使用的shell PATH=/sbin:/bin:/usr/sbin:/usr/bin #預約義的PATH路徑 MAILTO=root #出現問題發Email給該用戶 HOME=/ #家目錄 # run-parts 01 * * * * root run-parts /etc/cron.hourly #每小時的目錄 02 4 * * * root run-parts /etc/cron.daily #天天 22 4 * * 0 root run-parts /etc/cron.weekly #每週日 42 4 1 * * root run-parts /etc/cron.monthly #每月1號
分 時 日 月 周 執行者身份 命令
能夠看到前面的五個參數的定義和直接編輯計劃任務是同樣的,增長了執行的用戶定義和run-parts參數。
run-parts後面跟的是目錄名稱,例如:/etc/cron.hourly,表示每小時01分就到/etc/cron.hourly目錄中執行目錄下的全部可執行文件;固然,目錄是能夠本身定義的。
若是你須要增長系統的計劃任務,只須要在對應的目錄添加執行文件便可,例如:我須要在天天都執行updatedb的操做,則我只須要把/usr/bin/updatedb的執行命令連接到/etc/cron.daily目錄就能夠了。
一樣的,若是不須要使用目錄的方式,也可使用以下的方式:
02 01 * * * root /root/test.sh
也就是沒有了run-parts,後面就直接跟命令的絕對路徑url
3.注意事項:
若是使用crontab編輯計劃任務或直接修改/etc/crontab文件後,計劃任務沒有生效,可能須要重啓一下crond服務:service crond restart
當編寫/etc/crontab文件的時候,不要漏了指定執行計劃任務的用戶,這是和直接用crontab -e編輯不一樣的。
某用戶(如root)用crontab -e編輯的計劃任務存放在/var/spool/cron/root,這個文件下。但最好不要直接編輯他,由於crond執行的時候,會在/tmp目錄中創建須要的臨時文件,直接編輯會對此有影響,甚至出錯。
cron執行的每一項工做都會被紀錄到/var/log/cron這個日誌文件中,能夠從這個文件查看命令執行的狀態。
在windows下編寫的計劃任務文件,須要轉下格式:dos2unix 文件路徑spa
參考:
Linux下實行計劃任務介紹:http://soft.chinabyte.com/os/324/11592824.shtml
Linux計劃任務入門詳解:http://linux.chinaunix.net/techdoc/beginner/2009/10/25/1141243.shtml
Linux定時任務的設置:http://www.blogjava.net/freeman1984/archive/2010/09/23/332715.html