linux實(shí)現(xiàn)php定時(shí)執(zhí)行cron任務(wù)詳解
對(duì)于PHP本身并沒(méi)有一套解決方案來(lái)執(zhí)行定時(shí)任務(wù),不過(guò)是借助sleep函數(shù)完成的。這種方就是要提前做一些配置,如實(shí)現(xiàn)過(guò)程:
ignore_user_abort();//關(guān)掉瀏覽器,PHP腳本也可以繼續(xù)執(zhí)行.
set_time_limit(0);// 通過(guò)set_time_limit(0)可以讓程序無(wú)限制的執(zhí)行下去
$interval=60*30;// 每隔半小時(shí)運(yùn)行
do{
//這里是你要執(zhí)行的代碼
sleep($interval);// 等待5分鐘
}while(true);
不過(guò)關(guān)于這種方式我有一些擔(dān)心性能方面的問(wèn)題,不過(guò)也是個(gè)臨時(shí)的方法。
本人推薦的方式采用腳本來(lái)實(shí)現(xiàn),利用OS本身的定時(shí)任務(wù)機(jī)制,windows上場(chǎng)利用bat腳本。不過(guò)本人沒(méi)有在window上嘗試過(guò)。那我就講講在linux中的實(shí)現(xiàn)。
如果你的web server是基于linux的,那么可以采用linux下的cron job 來(lái)完成。以RedHat5 為例,我們只需要預(yù)先要定時(shí)執(zhí)行的邏輯代碼。例如demo.php
<?php
echo "Hello";
?>
然后是吧php用shell腳本一封裝,在shell腳本中調(diào)用demo.php,demo.sh代碼如下:
#!/bin/bash
#if you php install to /usr/local/php/
/usr/local/php/bin/php /home/xx-user/demo.php
完成shell腳本的編寫之后,確保它有足夠的這行權(quán)限,例如:/bin/chmod u+x demo.sh.
然后配置linux上的cronjob,cronjob是linux上默認(rèn)安裝的。如果你的任務(wù)是需要按小時(shí)、天、周、月來(lái)執(zhí)行的話,那么你直接可以將你的demo.sh腳本拷貝到
/etc/cron.hourly 、/etc/cron.daily 、/etc/cron.weekly、/etc/cron.monthly 就ok了,這樣就可以完成你的任務(wù)了 。如果到某個(gè)時(shí)間點(diǎn)想移除定時(shí)任務(wù),那就從上面這些folder中move到其它地方或者直接刪除掉就ok了。
如果你的腳本有特殊的執(zhí)行時(shí)間,例如每個(gè)星期的周二,或者是每個(gè)月的15號(hào)執(zhí)行。那么你就需要配置屬于你自己的cron job.
關(guān)于cron的特殊的配置請(qǐng)參考:http://www.pantz.org/software/cron/croninfo.html
這里我就按照每天的上午12點(diǎn)到下午的14點(diǎn)鐘之間每2分鐘運(yùn)行一次這個(gè)腳本,那么配置如下(例如demo.sh是位于/tmp 目錄下):
首先在linux的命令行中執(zhí)行crontab -e ,然后把規(guī)則輸入到里面:
*/2 12-14 * * * /tmp/demo.sh
帶輸入完成之后按鍵盤上的“Esc”鍵,然后輸入:wq,編輯頁(yè)面就退出了。然后你可以用crontab -l 來(lái)查看你剛編輯的cron job.
到此時(shí)特殊的cron 也就完成了。例如你剛才是用linux下的demo賬戶來(lái)完成上面的步驟,那么還有一個(gè)簡(jiǎn)單的方法就是直接可以編輯/var/spool/cron/demo 這個(gè)文件,可以直接
修改你的cron job. 例如 :vi /var/spool/cron/demo
利用OS的方式來(lái)管理你的定時(shí)任務(wù)是很快捷的,而且不用你擔(dān)心性能的問(wèn)題,除非你的腳本本身存在一些問(wèn)題。這樣的方式易于維護(hù),可以修改定時(shí)執(zhí)行的計(jì)劃,也可以輕松的移除和新增其它的定時(shí)任務(wù)。
- linux下用cron定時(shí)執(zhí)行任務(wù)的方法
- Linux crontab定時(shí)任務(wù)配置方法(詳解)
- linux使用crontab實(shí)現(xiàn)PHP執(zhí)行計(jì)劃定時(shí)任務(wù)
- linux定時(shí)任務(wù)crontab 實(shí)現(xiàn)每秒執(zhí)行一次的方法
- 服務(wù)器定時(shí)執(zhí)行計(jì)劃任務(wù),定時(shí)訪問(wèn)頁(yè)面(windows/linux)
- linux設(shè)置定時(shí)任務(wù)的方法步驟
- Linux下Python腳本自啟動(dòng)與定時(shí)任務(wù)詳解
- linux下定時(shí)執(zhí)行任務(wù)的方法及crontab 用法說(shuō)明(收集整理)
- Linux使用定時(shí)任務(wù)每周定時(shí)清理45天以前日志
- linux定時(shí)任務(wù)的一些相關(guān)操作匯總
相關(guān)文章
ThinkPHP使用Smarty第三方插件方法小結(jié)
這篇文章主要介紹了ThinkPHP使用Smarty第三方插件方法,結(jié)合實(shí)例形式總結(jié)分析了ThinkPHP使用Smarty模板的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03php實(shí)現(xiàn)生成驗(yàn)證碼實(shí)例分享
由于注冊(cè)的時(shí)候常常會(huì)用到注冊(cè)碼來(lái)防止機(jī)器惡意注冊(cè),這里我發(fā)表一個(gè)產(chǎn)生圖片驗(yàn)證碼的基本圖像,很簡(jiǎn)陋,有需要的小伙伴可以參考下2016-04-04Laravel學(xué)習(xí)教程之model validation的使用示例
這篇文章主要給大家介紹了關(guān)于Laravel學(xué)習(xí)教程之model validation使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-10-10關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑
這篇文章主要給大家介紹了關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11PHP register_shutdown_function()函數(shù)的使用示例
這篇文章主要介紹了PHP register_shutdown_function()函數(shù)的使用示例,當(dāng)我們的腳本執(zhí)行完成或者意外死掉導(dǎo)致 php 執(zhí)行即將關(guān)閉時(shí),register_shutdown_function()這個(gè)函數(shù)會(huì)被調(diào)用,需要的朋友可以參考下2015-06-06PHP表單驗(yàn)證內(nèi)容是否為空的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇PHP表單驗(yàn)證內(nèi)容是否為空的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11