用 php + cronjob 實作即時處理的服務

No Comments / 4,868 views

因為 php 擁有許多方便的函示庫,越來越多情況會習慣用它來處理,但是在 FreeBSD 主機上 cronjob 的最短間隔是一分鐘,不能即時回應總是有那麼一點不爽快。

而且透過 cronjob 每分鐘都去執行,如果程式跑很久的話,系統上會有一堆程式,佔掉很多資源。

總結下來,必須讓程式在兼具即時回應和資源有效使用的情況下運作。

作法上,假設我們寫一個 service.php 然後由 cronjob 每分鐘去執行一次。這時,程式裡應該有以下的機制:

  1. 檢查是否有其他執行緒存在,如果有就結束執行,以維持單一程式在執行。(當然也可以允許多個程式一起跑)
  2. 記錄程式的啟動時間 $startup = time() ;
  3. 開始辦正事,但記得盡可能 KISS (Keep it simple and stupid)。如果有一堆事要作,也讓它一件一件作,這樣可以避免佔用太多資源,花太多時間執行。
  4. 執行完畢後,檢查程式是否超過有效期限,例如可以設定程式生命週期為 3 分鐘,在週期內它會一直檢查有沒有工作要作,有就作,沒有就停止。如果超出週期,則不論有沒有工作要作,都會停止,讓下一分鐘的程式接手。這是為了避免程式活太久,產生一些不必要的問題。

$concurrency = 1 ;
$startup = time() ;
$ttl = 180 ; /* seconds, time to life of this process */
$cycle_latency = 500 ; /* micro seconds, usleep between each query */
$off_duty = 3 ; /* seconds, keep working until next process is about to coming in $off_duty seconds. */

解決 proftpd 造成中文檔名亂碼的問題

No Comments / 7,262 views

在 proftpd 1.3.1rc1 之後,開發者似乎替程式加入了一些語言上的規劃,雖然目的是為了解決檔名的問題,但卻也造成不少困擾。

在爬文測試過後,發現有幾個前提要先釐清: More

影響主机效能的關鍵因素

No Comments / 6,155 views

架設網路主機時,如果調配的方式錯誤,很容易造成效率不佳、穩定性下降,甚至減短壽命。那麼,有那些因素值得注意呢?
More

MySQL 5.5 以上的新編譯設定模式 CMake 及相關參數替代

No Comments / 7,988 views

還在為了新的主機而雀躍時,正準備安裝 MySQL 就被潑了一大盆冷水~~~

咦?這是什麼東西啊?怎麼見都沒見過....(我嫩)

原本慣用的 ./configure 設定模式不支援,只好耐著性子仔細爬文....

找到「Section 2.11, "Installing MySQL from Source."」才發現,原來改變長久以來的設定模式了.....=___=|||

This section describes how to build MySQL from source using CMake. Before MySQL 5.5, source builds used the GNU autotools on Unix-like systems.

More

sendmail .forward 設定細節

No Comments / 6,879 views

為了有效控制郵件的傳送,sendmail 提供了 .forward 和 aliases 的設定方式,兩者各有優缺點。
這裡把 .forward 的使用方式作個筆記

~/.forward 內容範例
More

Older Entries