今天下午把 stockbot 專案部署到 Appfog, 晚上檢查 cron log 發現時間都不對, 差了 8 個小時, 顯然還是主機所在位置 (愛爾蘭) 的時間. 我是用這個指令來指定為台北時間 :
ini_set('date.timezone','ASIA/Taipei')
這在別的 PHP Hosting 似乎沒問題, 但到 Appfog 就有問題, 可見 Appfog 無法更改 php.ini 內容. 還是用 date_default_timezone_set() 比較保險. 所以我把每一個 cron 程式頭的 ini_set 都改成如下 :
#設定時區以使 cron_log 紀錄台灣時間
@ini_set('date.timezone','ASIA/Taipei'); //不一定有效
@ini_set("max_execution_time","120"); //不一定有效
date_default_timezone_set("Asia/Taipei");
echo date_default_timezone_get()."<br>";
重新發佈之後, cron log 資料表所記錄的就是台灣時間了.
另外, 同時也發現一個問題, 也就是若 stock_list 資料表是空的 (也就是還沒執行過 fetch_twse_daily_close.php), 那麼去抓 Yahoo 資料的 cron 程式也會做白工, 因為每一次從 stock_list 抓幾筆 stock_id, 便去擷取相應網頁來分析, 如果 stock_list 是空的, 那麼迴圈也就不會跑. 所以, 相關的 2 個 cron 程式要做些修改 :
$SQL="SELECT `stock_id` FROM `stocks_list` WHERE NOT `stock_id` LIKE '0%'";
$RS=run_sql($SQL);
if (count($RS)==0) {
header('Location: fetch_twse_daily_close.php');
} //end of if
這樣一來, 只要是交易日, 只有第一個 cron 程式會失敗, 但它會觸發 twse 的擷取動作, 填滿 stock_list 資料表, 第二個執行的 cron 程式就會成功了. 但若系統啟動時為非交易日, 則要到下一個交易日收盤資料可以抓到時才會真正抓到資料, 在此之前全部都是做白工.
沒有留言:
張貼留言