非常多時候我們有希望server定時去運行一個腳本來觸發一個操作。比方使用七牛的工具上傳,假設同步文件中面有新添加一個文件,這個時候我們能夠提供定時腳本去完畢我們須要的同步命令(七牛的qrsbox工具是自己主動會同步的。僅僅須要在同步文件夾里面添加一個文件就會自己主動監聽上傳)。
1.安裝crontab
[root@CentOS ~]# yum install vixie-cron
[root@CentOS ~]# yum install crontabs
vixie-cron軟件包是cron的主程序;
crontabs軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。
2.開啟crontab服務
service crond start //啟動服務
用以下的方法啟動、關閉這個cron服務:
service crond start //啟動服務
service crond stop //關閉服務
service crond restart //重新啟動服務
service crond reload //又一次加載配置
查看crontab服務狀態:service crond status
手動啟動crontab服務:service crond start
查看crontab服務是否已設置為開機啟動,運行命令:ntsysv
加入開機自己主動啟動:
chkconfig –level 35 crond on
另外順帶介紹下ntsysv和chkconfig命令:
關於ntsysv命令是類圖形界面管理模式來設置開機啟動,須要先安裝才干夠使用,yum install -y ntsysv安裝好之后僅僅須要運行一個ntsysv就可以出現一個相似圖像化的管理界面。
上下鍵:能夠在中間的方框其中,在各個服務之間移動;
空格鍵:能夠用來選擇你所須要的服務,[*]表示開起啟動;
tab鍵:能夠在方框、OK、Cancel之間移動;
[F1]鍵:能夠顯示該服務的說明。
關於chkconfig命令行的形式設置是否開機自啟動或者查詢某個服務6個開機級別的運行情況。
設置開機自己主動啟動crond服務:
[root@CentOS ~]# chkconfig crond on
查看各個開機級別的crond服務運行情況
[root@CentOS ~]# chkconfig –list crond
crond 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
能夠看到2、3、4、5級別開機會自己主動啟動crond服務
取消開機自己主動啟動crond服務:
[root@CentOS ~]# chkconfig crond off
3.設置須要運行的腳本
新增調度任務可用兩種方法:
1)、在命令行輸入: crontab -e 然后加入對應的任務,wq存盤退出。
2)、直接編輯/etc/crontab 文件。即vi /etc/crontab,加入對應的任務。
crontab -e配置是針對某個用戶的。而編輯/etc/crontab是針對系統的任務
查看調度任務
crontab -l //列出當前的全部調度任務
crontab -l -u jp //列出用戶jp的全部調度任務
刪除任務調度工作
crontab -r //刪除全部任務調度工作
直接編輯 vim /etc/crontab ,默認的文件形式例如以下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
這個文本解釋的已經比較直觀了。其中
星號(*):代表全部可能的值。比如month字段假設是星號。則表示在滿足其他字段的制約條件后每月都運行該命令操作。
逗號(,):能夠用逗號隔開的值指定一個列表范圍,比如。“1,2,5,7,8,9”
中杠(-):能夠用整數之間的中杠表示一個整數范圍,比如“2-6”表示“2,3,4,5,6”
正斜線(/):能夠用正斜線指定時間的間隔頻率,比如“0-23/2”表示每兩小時運行一次。同一時候正斜線能夠和星號一起使用。比如*/10,假設用在minute字段,表示每十分鍾運行一次。
這里舉幾個樣例,基本涵蓋了常見的一些情況:
實例1
5 * * * * ls 指定每小時的第5分鍾運行一次ls命令
30 5 * * * ls 指定每天的 5:30 運行ls命令
30 7 8 * * ls 指定每月8號的7:30分運行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30運行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30運行ls命令
30 6 * * 0 ls 指定每星期日的6:30運行ls命令
30 3 10,20 * * ls 每月10號及20號的3:30運行ls命令
25 8-11 * * * ls 每天8-11點的第25分鍾運行ls命令
*/15 * * * * ls 每15分鍾運行一次ls命令
30 6 */10 * * ls 每一個月中。每隔10天6:30運行一次ls命令
22 4 * * * root run-parts /etc/cron.daily
#每天4:22以root身份運行/etc/cron.daily文件夾中的全部可運行文件,run-parts參數表示。運行后面文件夾中的全部可運行文件。
實例2
#每晚的21:30 重新啟動apache
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每月1、10、22日的4 : 45重新啟動apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每周六、周日的1 : 10重新啟動apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
#每天18 : 00至23 : 00之間每隔30分鍾重新啟動apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
#每星期六的11 : 00 pm重新啟動apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
#晚上11點到早上7點之間,每隔一小時重新啟動apache
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
#每一小時重新啟動apache
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
#每月的4號與每周一到周三的11點重新啟動apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
#一月一號的4點重新啟動apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
#每半小時同步一下時間
0/30 * * * * /usr/sbin/ntpdate 210.72.145.44
注意
* *1 * * *
命令表示是每小時之內的每一分鍾都運行。
必須指定在每一個小時的第幾分鍾運行。也就是說第一個*號必須改成一個數值。
由於*號表示的就是每一分鍾。
另外小時位的/1和沒有差別,都是每小時一次。
假設是設置*/2,實際上是能被2整除的小時數而不是從定時設置開始2小時后運行。比方9點設的到10點就會運行。
最后可能會遇到以下這個問題
root用戶下 輸入 crontab -l 顯示
no crontab for root 比如:
[root@CentOS ~]# crontab -l
no crontab for root
這個問題非常easy,相同在 root 用戶下輸入 crontab -e
按 Esc 按: wq 回車
在輸入 crontab -l 就沒有問題了
主要原因是由於這個liunxserver 第一次使用 crontab ,還沒有生成對應的文件導致的,運行了 編輯(crontab -e)后 就生成了這個文件