php+crontab的定時任務,看網上各種資料,總是他一言你一語,沒有一篇文章,看完就讓人懂的。現總結如下:
一、crontab是linux系統功能與程序無關
crontab -e //編輯某個用戶的cron服務 //這個最重要,自己編寫crontab
crontab -l //列出某個用戶cron服務的詳細內容 //這個也重要,查看自己寫了哪些定時任務
crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -r //刪除某個用戶的cron服務
關於時間的書寫規則:
前5個字段分別表示:
分鍾:0-59
小時:1-23
日期:1-31
月份:1-12
星期:0-6(0表示周日)
還可以用一些特殊符號:
*: 表示任何時刻
,: 表示分割
-:表示一個段,如第二端里: 1-5,就表示1到5點
/n : 表示每個n的單位執行一次,如第二段里,*/1, 就表示每隔1個小時執行一次命令。也可以寫成1-23/1。。在‘/’子表達式(分鍾)里的“0/15”表示從第0分鍾開始,每15分鍾執行一次。也可以 20-59/3,從20分到59分每3分鍾執行一次
二、寫完重啟cron:
sudo service cron restart 或者 /etc/init.d/cron restart //centos下是crond
三、對於Yii下使用cron:
重點三個地方:
A/ protected/config/console.php -->里面db注釋的部分開啟
B/ 自己建commands/TestCommand.php
C/ yiic.php里面的引用地址的配置,細節見補充
寫一個運行成功的實例:
*/1 * * * * php /home/user_name/sites/project_name/yiicmd.php test 'datetime'
site為用戶名下的php運行目錄,project_name為項目名。yiicmd.php 自己寫的文件,與protected下的yiic.php一樣,但里面yii的引用路徑要改~
關於cron的補充:
cron的實際存放地址:看着好像etc下面有cron.d cron.daily cron.hourly crontab,這么多crontab的文件,但實際上:
linux:/var/spool/cron // 用 crontab -l 打開看到的文件,就是它
freebsd:/var/cron/tabs
mac 下,crontab也是ok的,好像都不需要重啟什么
*/1 * * * * echo "wagaga" >> /Users/lia****uan/test.txt //每一分鍾執行一次,“ >>”表示輸出到
關於yiic補充:
yiic 默認只是一個php文件,需要用php命令運行:php yiic 或者 php yiic.php
也可以用:chmod +x yiic 命令直接將yiic改成可運行的。 便可直接進入cd protected寫:yiic help。
參考資料:
http://www.yiiframework.com/extension/yii-crontab/ //關於yiicmd.php位置無所謂,都可以,關鍵里面定位要注意。這個插件幾乎無用,因為它無法寫入crontab中,要改掉各種文件的寫權限,太煩。
http://linux.chinaitlab.com/unix/795992.html //講的也比較好,簡潔
http://blog.csdn.net/tianlesoftware/article/details/5315039 //講的一般,比較細
幾個典型時間例子:
每五分鍾執行 */5 * * * *
每小時執行 0 * * * *
每天執行 0 0 * * *
每周執行 0 0 * * 0
每月執行 0 0 1 * *
每年執行 0 0 1 1 *
5 * * * *每小時第5分鍾執行
*/5 * * * *每5分鍾執行
0 2 * * * 每天凌晨2點執行