crond是什麼?html
crond 和crontab是不可分割的。crontab是一個命令,常見於Unix和類Unix的操做系統之中,用於設置週期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於「crontab」文件中,以供以後讀取和執行。該詞來源於希臘語chronos(χρόνος),原意是時間。java
而crond正是它的守護進程。cron服務是一個定時執行的服務,能夠經過crontab 命令添加或者編輯須要定時執行的任務。linux
linux定時任務分爲兩種shell
1)系統自身輪訓的任務,好比定時(5天或者一週)備份/var/log/message等日誌文件(系統的定時任務通常分爲七段或者八段(centos6如下),以空格分割)apache
系統輪訓的配置文件/etc/logrotate.conf (centos7如下的在/etc/cron.daily/logrotate/logrotate.conf )vim
2)用戶執行的定時任務(用戶的定時任務通常分爲六段)windows
at適合執行一次就結束的調度任務centos
anacrontab適合於非7*24小時開機的服務器準備的,是以天爲單位執行的,不能指定以分鐘的定時任務,在停機期間沒有任務執行,能夠開機時執行。tomcat
cron服務是Linux的內置服務,但它不會開機自動啓動,能夠每分鐘執行任務。能夠用如下命令啓動和中止服務:bash
/bin/systemctl start crond
/bin/systemctl stop crond
/bin/systemctl restart crond
/bin/systemctl reload crond
/bin/systemctl status crond
以上1-5行分別爲啓動、中止、重啓服務和從新加載配置、查看服務狀態
把cron設爲在開機的時候自動啓動
vi /etc/rc.local
/bin/systemctl start crond.service
crontab操做
crontab -u //設定某個用戶的cron服務
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除某個用戶的cron服務
crontab -e //編輯某個用戶的cron服務
crontab -i //打印提示,輸入yes等確認信息/var/spool/cron/root (以用戶命名的文件) 是全部默認存放定時任務的文件
/etc/cron.deny 該文件中所列出用戶不容許使用crontab命令
/etc/cron.allow 該文件中所列出用戶容許使用crontab命令,且優先級高於/etc/cron.deny/var/log/cron 該文件存放cron服務的日誌
基本格式
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
定時任務的每段爲:分,時,日,月,周,用戶,命令
第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令*:表示任意時間都,實際上就是「每」的意思。能夠表明00-23小時或者00-12每個月或者00-59分
-:表示區間,是一個範圍,00 17-19 * * * cmd,就是天天17,18,19點的整點執行命令
,:是分割時段,30 3,19,21 * * * cmd,就是天天凌晨3和晚上19,21點的半點時刻執行命令
/n:表示分割,能夠當作除法,*/5 * * * * cmd,每隔五分鐘執行一次
基本使用
crontab -l -u root #查看root用戶
0 */1 * * * command
0 */2 * * * command
crontab -e #編輯定時任務,在編寫時會檢查語法,而echo,或者vi編輯配置時不會檢查(visudo也會檢查語法)
0 */1 * * * command
0 */2 * * * commandcrontab文件的一些例子:
1)30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重啓apache。
2)45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每個月一、十、22日的4 : 45重啓apache。
3)10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每週6、週日的1 : 10重啓apache。
4)0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在天天18 : 00至23 : 00之間每隔30分鐘重啓apache。最後一次的任務執行時間爲23:305)0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重啓apache。6)* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小時重啓apache(錯誤的)
*表明每分鐘就執行一次,上面的語句的意思爲每隔一小時的每分鐘都在執行重啓apache*/60 * * * * #每60分鐘即每小時執行一次
*/105 * * * * #每105分鐘執行一次7)* 23,00-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11點到早上7點之間,每隔一小時重啓apache(錯誤的)上面的定時任務的分鐘爲*號,表明每分鐘都在執行,表示晚上23點和凌晨0-7點之間每隔一小時的每分鐘都在再行重啓apache
8)0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每個月的4號與每週一到週三的11點重啓apache(周和日儘可能不要同時使用)
9)0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一號的4點重啓apache
其餘
root能夠建立普通用戶cron計劃任務 crontab -e -u wgp crond不能守護秒級定時任務,一般秒級的定時任務須要本身寫shell腳本 #!/bin/bash whith true do echo "hello world!" >>/tmp/log.txt sleep 1 done sh test.sh & 放到後臺執行 tail -f /tmp/log.txt 查看文件變化
在編輯裏面要加上註釋來區分是誰編寫的
00 09,14 * * 6,0 /bin/bash /server/scripts/test.sh >/dev/null 2>&1
每週六,日的上午九點和下午14點執行test.sh,並把標準錯誤2和標準輸出1定位到空文件
*/1 * * * * echo + >>/tmp/log.log >/dev/null 2>&1
注意:定時規則若是是命令在已經有了一個重定向符號>>,再加上一個重定向/dev/null 2>&1,是沒有結果的
命令放定時任務裏面,時間的%必須要轉義\%
cron服務的日誌文件在/var/log/cron文件下
要注意環境變量給定時任務帶來的影響,特別是與java服務相關的變量,定時任務只能識別不多的系統變量,同時也要避免沒必要要的命令打印輸出
Quartz能夠實現秒級任務
crond編輯三種定時方式
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
2.保存退出,crontab -l
3.tail -f /tmp/log.log
crontab定時任務執行不成功
1.查看定時任務有沒有開啓2.符號*號是否弄懂,是否寫錯,表明每一分鐘,小時,日,月,周3.執行權限等等4.執行的腳本或者寫入文件的目錄是否存在,是不是絕對路徑5.是否有系統變量,定時任務對系統變量的識別不多,好比寫個tomcat定時關機,手工ok,可是腳本就是不執行6.命令放定時任務裏面,時間的%必須要轉義\%7.多看定時任務日誌8.企業故障案例一(https://www.cnblogs.com/p0st/p/9720120.html)
![](http://static.javashuo.com/static/loading.gif)