2010-06-28 63 views
1

我使用PHP和Oracle,並使用crontab在預定時間執行PHP腳本。我目前的日誌/審計解決方案涉及簡單的日誌文件。我想將我的cron執行日誌保存到數據庫中。我應該如何實現一個數據庫cron作業記錄器?

現在我試圖設計過程,以便當一個cron作業開始時,我在CronExecution表中創建一個記錄。然後每當我想爲該cron記錄某些東西時,我就會在CronEvent表中記錄一條記錄,該表中有CronExecution表的外鍵。

我計劃使用PRAGMA AUTONOMOUS pl/sql過程記錄所有事件。通過這個過程,我將能夠以一致的方式記錄其他pl/sql程序中的事件以及我的PHP代碼。

爲了使它更健壯,我的計劃是在數據庫日誌調用失敗的情況下有一個回退以將錯誤記錄到文件。

有沒有人寫過類似的東西?你有什麼建議根據你的經驗?

回答

1

是的,我已經做了幾次。

CronExecution表是個好主意。但是,我不知道你確實需要創建CronEvent表。相反,只需給自己一個「狀態」列並更新該列。

你會發現,這使得故障轉移文件更容易。當你建立很多這樣的CronExecutions時,你可能對CronEvents的興趣減少,對執行的完整狀態更感興趣。

包裝存儲過程中的所有更新調用。你一定有這個正確的。

在您的CronExecution中包含'計劃'將證明非常方便。有很多cron工作很容易,不能連接「這需要多長時間?」的點。「這是否應該運行」。包括一個「下一次計劃的運行」完成工作後會讓你的生活更輕鬆。

+0

那麼你是否建議我有一個CLOB專欄,在每次完成工作時追加每封郵件?然後在最後設置完成狀態或者什麼,在這一點上我可以從該CLOB中檢索整個執行日誌? 您還了解我在數據庫中具有某種調度屬性的想法。我已經使用了Quartz for Java,並且我喜歡這一點,但是我不確定我可以從crontab中接收多少功能,因爲我使用的是PHP。但添加信息字段與開始/停止/下一次運行的細節是一個好主意。謝謝! – 2010-06-28 04:13:43

+0

CLOB,VARCHAR(MAX),無論你在數據庫中。根據我的經驗,我很少需要'CronEvent'級別的任何東西。只需在每條日誌消息的開始處打印時間,並且您應該沒問題。現在你不需要在數據庫中進行配置,但是當你開始編寫代碼來觀看「CronLog」時,你會想知道的最大問題是「X最後一次運行的時間,需要多長時間,什麼時候會運行它再次運行「 – 2010-06-28 04:28:20

0

您將需要閱讀關於DBMS_SCHEDULER的文檔。 這是一點點工作來實現(什麼不是?),但它可以讓你從數據庫中控制預定的和一次性的工作。這包括OS級作業。

相關問題