目標(biāo):
讓計(jì)算機(jī)定時(shí)訪問(wèn)某個(gè)URL鏈接,以完成不可告人的目的。
方法:
- windows 的計(jì)劃任務(wù)
- linux的腳本程序
- 讓web瀏覽器定時(shí)刷新
分析:
讓瀏覽器定時(shí)刷新是個(gè)不錯(cuò)的主意。但在PHP環(huán)境中實(shí)現(xiàn)這個(gè)方法需要解決如下幾個(gè)問(wèn)題:
- PHP腳本執(zhí)行時(shí)間限制,默認(rèn)的是30m 解決辦法:set_time_limit();或者修改PHP.ini 設(shè)置max_execution_time時(shí)間(不推薦)
- 如果客戶(hù)端瀏覽器關(guān)閉,程序可能就被迫終止,解決辦法:ignore_user_abort即使關(guān)閉頁(yè)面依然正常執(zhí)行
- 如果程序一直執(zhí)行很有可能會(huì)消耗大量的資源杂靶,解決辦法使用sleep使用程序休眠一會(huì),然后在執(zhí)行
另外酱鸭,博主也有結(jié)論:PHP定時(shí)執(zhí)行任務(wù)的效率不是很高吗垮,建議關(guān)于定時(shí)執(zhí)行任務(wù)的工作還是交給shell來(lái)做吧,畢竟那才是王道凹髓。
由于服務(wù)器環(huán)境為linux烁登,我們直奔主題:如何使用Linux的Crontab執(zhí)行PHP腳本。
文中提到:如果你的PHP腳本可以通過(guò)URL觸發(fā)蔚舀,你可以使用lynx或curl或wget來(lái)配置你的Crontab饵沧。
其中:
- lynx : 一個(gè)在linux環(huán)境下的輕型文本瀏覽器
- curl : 一個(gè)利用URL規(guī)則在命令行下工作的文件傳輸工具
- wget : 一個(gè)十分常用命令行下載工具
既然都不錯(cuò),就隨便選一個(gè)赌躺,lynx好了狼牺,不過(guò)有的服務(wù)器上不一定有l(wèi)ynx,需要安裝[2]礼患。
<pre>
wget http://lynx.isc.org/current/lynx2.8.7rel.2.tar.gz
tar zxf lynx2.8.7rel.2.tar.gz
cd lynx2-8-7/
./configure
make
make install
</pre>
這里可能遇到的問(wèn)題是是钥,lynx依賴(lài)于curses圖形庫(kù),而某些linux環(huán)境在安裝時(shí)沒(méi)有默認(rèn)安裝這個(gè)庫(kù)讶泰。所以需要手動(dòng)安裝咏瑟。
<pre>
wget ftp://invisible-island.net/ncurses/ncurses-5.7.tar.gz
./configure
make
make install
</pre>
在configure過(guò)程中可能遇到如下錯(cuò)誤:[3]
<code>/usr/bin/ld: cannot find -lc</code>
意思是:編譯過(guò)程找不到對(duì)應(yīng)庫(kù)文件。其中痪署,-lxxx表示鏈接庫(kù)文件 libxxx.so,一般出現(xiàn)這種錯(cuò)誤有以下幾種原因:
1.系統(tǒng)缺乏對(duì)應(yīng)的庫(kù)文件
2.版本不對(duì)應(yīng)
3.庫(kù)文件的鏈接錯(cuò)誤
4.庫(kù)文件路徑設(shè)置問(wèn)題
對(duì)于情況1和2兄旬,可以通過(guò)下載安裝lib來(lái)解決狼犯。
情況3余寥,通過(guò)find
或者locate
指令定位到鏈接文件,查看鏈接文件是否正確的指向了我們希望的lib悯森,如果不是宋舷,用 ln -sf */libxxx.so.x */libxxx.so 指令修改它
情況4,可以到/etc/ld.so.conf.d
目錄下瓢姻,修改其中任意一份conf文件祝蝠,(可以自建conf,以方便識(shí)別)將lib所在目錄寫(xiě)進(jìn)去幻碱,然后在終端輸入 ldconfig 更新緩存绎狭。
我通過(guò)find命令發(fā)現(xiàn)/usr/lib
下已經(jīng)存在了libc.so,但不存在libc.a褥傍,于是執(zhí)行
<pre>
yum install glibc-static
</pre>
然后make clean
儡嘶,重新編譯curses和lynx。順利安裝好lynx恍风。
最后蹦狂,我們?cè)撆渲胏rontab了[4]。關(guān)于crontab的使用方法請(qǐng)參考crontab命令詳解朋贬。
這里我們想讓系統(tǒng)定時(shí)訪問(wèn)下指定的URL凯楔,屬于用戶(hù)級(jí)定時(shí)任務(wù)。所以直接crontab就行了:
<pre>
crontab -e
20-40/5 21 * * 1,3,6 lynx http://www.someexample.com/request.php -dump
</pre>
<p>意思就是在每周一锦募、三啼辣、六的晚上9點(diǎn)20到9點(diǎn)40之間每5分鐘訪問(wèn)一下www.someexample.com/request.php。這樣我們就實(shí)現(xiàn)了利用linux系統(tǒng)的crontab
命令定時(shí)執(zhí)行任務(wù)的目的御滩。</p>