最近我碰到了一個問題:我需要觸發一個php腳本來定時給我發郵件。可是,這個腳本是另一個腳本的一部份,用到了很多includes命令,同時也有很多庫文件使用了includes命令。
一般情況下,觸發一個php腳本無話可說,你需要做的便是在服務器上設置一個如下的crontab
/bin/local/php /path/to/your/php/script.php
這就是了,無論你是否願意,script.php這個腳本文件將由crontab自動運行
可是,問題就來了:當bash運行一個cron的時候,不會通過Apache,當然了,還有它的參數,include_paths等等。所以呢,php將會在/bin/local/php目錄下找文件,當然找不到。
所以,遇見這種情況,按照下面的方法做:
在終端上輸入如下命令得到sh 和 lynx 程序的路徑:
whereis sh
whereis lynx
or
which sh
which lynx
隨便輸入一個,其中便會返回你要的路徑。如果你的系統裡沒有lynx,試試links,w3m,或者 links2,這些是其它的文本模型浏覽器。這些浏覽器將會運行你的腳本。
然後你需要創建一個sh文件,用它來調用php文件,通過lynx。假設你的服務器已經安裝了lynx,sh路徑為 /bin/sh,lynx路徑為 /usr/local/bin/lynx
#!/bin/sh
/usr/local/bin/lynx -source http://www.yoursite.com/folder/script.php
注意感歎號
把這個腳本保存為cron-lynx.sh
保存到一個你找得到的地方,比如:
/usr/www/yourdirectory/sh_scripts/
我個人比較喜歡放在網站根目錄。
然後再創建一個script.php的文件。當cron運行的時候,將會通過lynx來調用它。這個文件可以通過浏覽器來訪問。我的這個很簡單:
// I'm assuming you've already set your include path
include( 'includes/stuff/another_script.inc' );
another_program();
?>
然後我編輯主機的crontab,像下面這樣。
/bin/sh /usr/www/yourdirectory/sh_scripts/cron-lynx.sh
在/bin/sh 和 /usr 間有空格。就這樣就設好了,還有一點要注意的是,你的sh文件和php文件都正確無誤