php添加linux定时任务,PHP与Linux定时任务
定時(shí)任務(wù)在實(shí)際開(kāi)發(fā)中用到是非常多的,這里也簡(jiǎn)單說(shuō)說(shuō)PHP怎么執(zhí)行定時(shí)任務(wù)。我們都知道PHP是一門(mén)解釋性語(yǔ)言,當(dāng)我們?cè)跒g覽器中輸入某個(gè)URL時(shí),我們才能去執(zhí)行PHP,但是如果不訪問(wèn)URL呢,怎么讓PHP跑起來(lái)?這個(gè)問(wèn)題,可能大家都沒(méi)有仔細(xì)思考過(guò),當(dāng)然我也沒(méi)有考慮過(guò),,,,
PHP的定時(shí)任務(wù)其實(shí)就是讓PHP腳本每隔一段時(shí)間運(yùn)行一次,這就需要結(jié)合Linux的crontab了。下面我們需要先了解一下crontab。
Linux crontab命令
Linux crontab是用來(lái)定期執(zhí)行程序的命令。先看一下下面幾個(gè)命令。
crontab -e??//編輯定時(shí)任務(wù)
crontab -r?//刪除定時(shí)任務(wù)
crontab -l? //列出當(dāng)前定時(shí)任務(wù)
除此之外你還需要知道的是,定時(shí)任務(wù)的格式是怎么樣的
f1 f2 f3 f4 f5 program
其中 f1 是表示分鐘,f2 表示小時(shí),f3 表示一個(gè)月份中的第幾日,f4 表示月份,f5 表示一個(gè)星期中的第幾天。program 表示要執(zhí)行的程序。
當(dāng) f1 為 * 時(shí)表示每分鐘都要執(zhí)行 program,f2 為 * 時(shí)表示每小時(shí)都要執(zhí)行程序,其余類(lèi)推
當(dāng) f1 為 a-b 時(shí)表示從第 a 分鐘到第 b 分鐘這段時(shí)間內(nèi)要執(zhí)行,f2 為 a-b 時(shí)表示從第 a 到第 b 小時(shí)都要執(zhí)行,其余類(lèi)推
當(dāng) f1 為 */n 時(shí)表示每 n 分鐘個(gè)時(shí)間間隔執(zhí)行一次,f2 為 */n 表示每 n 小時(shí)個(gè)時(shí)間間隔執(zhí)行一次,其余類(lèi)推
當(dāng) f1 為 a, b, c,... 時(shí)表示第 a, b, c,... 分鐘要執(zhí)行,f2 為 a, b, c,... 時(shí)表示第 a, b, c...個(gè)小時(shí)要執(zhí)行,其余類(lèi)推
通過(guò)一個(gè)實(shí)例來(lái)了解定時(shí)任務(wù)
首先我們?cè)贚inux下任一目錄新建index.php文件<?php
$path = dirname(__FILE__) . '/data.txt';
if (!file_exists($path)) {
file_put_contents($path, 0);
} else {
$num = file_get_contents($path);
file_put_contents($path, $num + 1);
}
這段代碼的意思在data.txt中寫(xiě)一個(gè)數(shù)字,并且每次執(zhí)行將數(shù)字更新+1。
然后我們使用crontab -e命令來(lái)創(chuàng)建定時(shí)任務(wù),內(nèi)容為下*/1 * * * * php /www/wwwroot/crontab/index.php
這樣其實(shí)定時(shí)任務(wù)就建好了,這句代碼的意思是沒(méi)過(guò)一分鐘執(zhí)行一次這個(gè)目錄下的index.php文件一次。
代碼寫(xiě)好了,我們需要看定時(shí)任務(wù)是不是成功執(zhí)行了。tail -f /var/log/cron
使用該命令才看定時(shí)任務(wù)日志,下面就說(shuō)明定時(shí)任務(wù)已經(jīng)成功執(zhí)行了。
接下來(lái)我們可以看一下,index.php同目錄下是不是多了一個(gè)'data.txt'的文件,如果有說(shuō)明我們已經(jīng)成功了,并且文件中的值會(huì)每過(guò)一分鐘+1。
如果,如果并沒(méi)有出現(xiàn)預(yù)期的結(jié)果,那么,,,開(kāi)始排查bug吧,這是每個(gè)程序員都會(huì)經(jīng)歷的,同樣的代碼,同樣的操作,為啥會(huì)出現(xiàn)不一樣的結(jié)果??!!(抓狂)
冷靜一下,開(kāi)始找bug了,首先你的確保自己的定時(shí)任務(wù)執(zhí)行了,自己通過(guò)crontab日志確定,然后再想是不是代碼的問(wèn)題,php index.php先手動(dòng)執(zhí)行試試,咦,手動(dòng)執(zhí)行竟然也沒(méi)出現(xiàn)預(yù)料的結(jié)果,開(kāi)始仔細(xì)檢查代碼,而又想到自己在本地windows下能夠完美運(yùn)行該文件,那么如果有問(wèn)題,可能出現(xiàn)在Windows和Linux系統(tǒng)的差異上,路徑?權(quán)限?
想到就試試,將代碼里的路徑換成絕對(duì)路徑,并使用“/”連接(windows路徑連接符是“\”),最后賦予index.php寫(xiě)和執(zhí)行的權(quán)限chmod 777 index.php
OMG!預(yù)期效果達(dá)到了。
老規(guī)矩,如果你有疑問(wèn),歡迎留言。你若問(wèn),我必答。
總結(jié)
以上是生活随笔為你收集整理的php添加linux定时任务,PHP与Linux定时任务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php类可以遍历,在PHP中检测一个类是
- 下一篇: linux elf命令,linux st