隨著網站程式 (如 ASP、JSP、PHP、Perl...) 的應用愈來愈多,有些程式必須定時執行。而網站程式並不像一般應用程式可以輕鬆的定時執行。
Wget 原本是設計來透過 HTTP、HTTPS、FTP 等網路協定來抓取檔案的,Linux 大部份也都有內建這個套件。如果在 Linux 下拿來搭配 crontab 就能達到定時執行某個網站程式的功能,也不用額外安裝任何的程式。
*/5 * * * * wget -qO - http://{SERVER NAME}/refresh.php
這個參數會讓 Wget 把抓取下來的檔案顯示在螢幕上,而不會寫入到檔案。只是要注意一下安全性的問題,不要讓阿貓阿狗都能執行。
(2006.07.14 補充說明) 如果程式需要做參數傳遞的話,使用 Querystring (Form GET) 時在記得在網址頭尾加上單引號,因為 & 符號是 Linux 背景執行用的保留字。另外 Wget 也有提供 POST 字串傳值跟 POST 檔案二種方式,可以參考一下:
--post-data=STRING use the POST method; send STRING as the data. --post-file=FILE use the POST method; send contents of FILE.
註: Wegt 也有編譯好的 Windows 版本可以自行搭配使用。
延伸閱讀: Wget 參數說明 (中文) 鳥哥: ctrontab 的設定方式
如果在第5分鍾抓100個IP,是同時開100支wget呢 或者是第一個IP抓完,換第2個IP呢? */5 * * * * wget -qO - http://220.134.71.1 */5 * * * * wget -qO - http://220.134.71.2 .... */5 * * * * wget -qO - http://220.134.71.100 請解答
前者可能會先受限於自己的頻寬不夠, 反而拖慢速度, 後者 wget 有參數(如果我沒記錯的話應該是 -i )可以配合一個 anyname.txt 純文字檔案, 依照檔案內部寫入的 URL 順序執行任務.
如果在第5分鍾抓100個IP,是同時開100支wget呢 或者是第一個IP抓完,換第2個IP呢? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 路過吐個嘈 這問題沒前沒後的,看都看不懂,大家要怎麼回答呢?? 第5分鍾抓100個IP?? what the hell was that?
在crontab檔寫了以下的設定 */5 * * * * wget -qO - http://220.134.71.1 */5 * * * * wget -qO - http://220.134.71.2 .... */5 * * * * wget -qO - http://220.134.71.100 假設wget抓一個IP花約5秒,那麼 請問在第5分鍾時是同時100個ip一起抓呢或是 5:00:00抓第一個IP 5:05:00抓第二個IP .....以此類推
印象中 cron 會排序執行,不會同步,也就是一個抓完才換下一個。嗯,印象中.....
我印象中, 記得 wget 只有抓取遠端檔案的用途, 並沒有辦法執行遠端(或者應該是說觸發)特定檔案或程式的用途. 嗯! 印象中 ......... XD
yesYouDo: 如果你希望同時執行的話,可以試試 wget 的 -b 參數。(在 Linux 下可以背景執行,但不適用Windows)
randy: 抓取網站程式檔案就是一種觸發的方式喔。^^
NEO大開頭就說過.Wget 原本是設計來透過 HTTP、HTTPS、FTP 等網路協定來抓取檔案的. 只是被我們取巧.剛好轉來當成WEB界面AP的觸發程式.如.你要定時去抓取某些網頁資料回來分析.就可以用這方法.
不過.後來我們直接改用PHP當SHELL.然後再用crontab去定時執行.效果也不錯.
正好有個問題可以用這個方法解決,真是謝謝 neo 大