目標:
讓計算機定時訪問某個URL鏈接,以完成不可告人的目的。
方法:
- windows 的計劃任務(wù)
- linux的腳本程序
- 讓web瀏覽器定時刷新
分析:
讓瀏覽器定時刷新是個不錯的主意。但在PHP環(huán)境中實現(xiàn)這個方法需要解決如下幾個問題:
- PHP腳本執(zhí)行時間限制,默認的是30m 解決辦法:set_time_limit();或者修改PHP.ini 設(shè)置max_execution_time時間(不推薦)
- 如果客戶端瀏覽器關(guān)閉,程序可能就被迫終止,解決辦法:ignore_user_abort即使關(guān)閉頁面依然正常執(zhí)行
- 如果程序一直執(zhí)行很有可能會消耗大量的資源,解決辦法使用sleep使用程序休眠一會,然后在執(zhí)行
另外,博主也有結(jié)論:PHP定時執(zhí)行任務(wù)的效率不是很高,建議關(guān)于定時執(zhí)行任務(wù)的工作還是交給shell來做吧,畢竟那才是王道。
由于服務(wù)器環(huán)境為linux,我們直奔主題:如何使用Linux的Crontab執(zhí)行PHP腳本。
文中提到:如果你的PHP腳本可以通過URL觸發(fā),你可以使用lynx或curl或wget來配置你的Crontab。
其中:
- lynx : 一個在linux環(huán)境下的輕型文本瀏覽器
- curl : 一個利用URL規(guī)則在命令行下工作的文件傳輸工具
- wget : 一個十分常用命令行下載工具
既然都不錯,就隨便選一個,lynx好了,不過有的服務(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>
這里可能遇到的問題是,lynx依賴于curses圖形庫,而某些linux環(huán)境在安裝時沒有默認安裝這個庫。所以需要手動安裝。
<pre>
wget ftp://invisible-island.net/ncurses/ncurses-5.7.tar.gz
./configure
make
make install
</pre>
在configure過程中可能遇到如下錯誤:[3]
<code>/usr/bin/ld: cannot find -lc</code>
意思是:編譯過程找不到對應(yīng)庫文件。其中,-lxxx表示鏈接庫文件 libxxx.so,一般出現(xiàn)這種錯誤有以下幾種原因:
1.系統(tǒng)缺乏對應(yīng)的庫文件
2.版本不對應(yīng)
3.庫文件的鏈接錯誤
4.庫文件路徑設(shè)置問題
對于情況1和2,可以通過下載安裝lib來解決。
情況3,通過find或者locate指令定位到鏈接文件,查看鏈接文件是否正確的指向了我們希望的lib,如果不是,用 ln -sf */libxxx.so.x */libxxx.so 指令修改它
情況4,可以到/etc/ld.so.conf.d目錄下,修改其中任意一份conf文件,(可以自建conf,以方便識別)將lib所在目錄寫進去,然后在終端輸入 ldconfig 更新緩存。
我通過find命令發(fā)現(xiàn)/usr/lib下已經(jīng)存在了libc.so,但不存在libc.a,于是執(zhí)行
<pre>
yum install glibc-static
</pre>
然后make clean,重新編譯curses和lynx。順利安裝好lynx。

最后,我們該配置crontab了[4]。關(guān)于crontab的使用方法請參考crontab命令詳解。

這里我們想讓系統(tǒng)定時訪問下指定的URL,屬于用戶級定時任務(wù)。所以直接crontab就行了:
<pre>
crontab -e
20-40/5 21 * * 1,3,6 lynx http://www.someexample.com/request.php -dump
</pre>
<p>意思就是在每周一、三、六的晚上9點20到9點40之間每5分鐘訪問一下www.someexample.com/request.php。這樣我們就實現(xiàn)了利用linux系統(tǒng)的crontab命令定時執(zhí)行任務(wù)的目的。</p>