linux的crontab一直是伺服器運維、業務開展的利器。但當定時任務增多時,管理和遷移都變得很麻煩,而且容易出問題。下面提供了乙個使用php編寫的crontab管理器,但仍需要在crontab下新增乙個一分鐘執行一次的叫來來執行這個管理器。通過這個管理器,可以實現以下目的:
這裡不建議你使用資料庫進行crontab配置管理,除非你能夠保證資料庫的請求能夠在長時間內保持穩定響應的話。推薦使用nosql型別的cache儲存,同時做好持久化備份。
廢話不多說,上一段測試**:
[php]view plain
copy
define(
'ds'
, directory_separator);
requiredirname(__file__
) . ds .
'vendor'
. ds .
'autoload.php'
; date_default_timezone_set('prc'
);
error_reporting
(e_all);
$crontab_config
= [
'test_1'
=> [
'name'
=>
'服務監控1'
, 'cmd'
=>
'php -v'
, 'output'
=>
'/tmp/test.log'
, 'time'
=>
'* * * * *'
],
'single_test'
=> [
'name'
=>
'php -i'
, 'cmd'
=>
'php -i'
, 'output'
=>
'/tmp/single_script.log'
, 'time'
=> [
'* * * * *'
, '* * * * *'
, ],
],
];
$crontab_server
= new
\jenner\zebra\crontab\crontab(
$crontab_config
);
$crontab_server
->start();
這段**使用了php的包管理器composer,如果你不了解,可以手動把需要用到的類,include到你的php指令碼。
執行後,我們會在預設的日誌檔案(/var/log/php_crontab.log)中檢視crontab的執行記錄,當然你可以通過向crontab傳遞第二個引數指定日誌檔案日誌(確保可寫)。日誌檔案內容如下:
[php]view plain
copy
[2014-11-10 19:50:08]-content:start. pid3778
[2014-11-10 19:50:08]-content:php -v
[2014-11-10 19:50:08]-content:php -i
[2014-11-10 19:50:08]-content:php -i
[2014-11-10 19:50:08]-content:end
. pid:3778
日誌會記錄程式的啟動時間、執行的命令、pid等資訊。由於我是手動執行的,所以描述不是準確的00秒。正式使用時,在crontab中新增一條如下命令即可實現該管理器的自動執行。
[php]view plain
copy
* * * * * php php_crontab_manager.php
管理器相關依賴:
jenner/multi_process包是乙個簡單的程序控制包,主要是為了在執行定時任務時,使用子程序執行,這樣父程序就不會阻塞,造成定時任務延遲的問題。
這個專案託管在github上,同時提供了packagist包支援,你可以通過在composer.json中新增:"jenner/crontab": "1.0.0"來載入這個包。
具體原始碼可以在github檢視。
基於php的crontab定時任務管理
基於PHP的crontab定時任務管理
by jenner 2014年11月10日 閱讀次數 6 linux的crontab一直是伺服器運維 業務開展的利器。但當定時任務增多時,管理和遷移都變得很麻煩,而且容易出問題。下面提供了乙個使用php編寫的crontab管理器,但仍需要在crontab下新增乙個一分鐘執行一次的叫來來執行這個管理器...
PHP的crontab定時任務管理
cron 是乙個linux下的定時執行工具。使用者可以使用crontab工具來配置cron任務。安裝crontab yum install crontabs 啟動 sbin service crond start 啟動服務 sbin service crond stop 關閉服務 sbin serv...
crontab定時執行php程式
定時任務一直就是應用程式不可少的功能,在php中,想要做定時任務,如果使用ignore user abort true 消耗資源。這裡用的是linux crontab任務計畫 常用選項 u 指定某個使用者,不加 u選項則為當前使用者 e 制定計畫任務 l 列出計畫任務 r 刪除計畫任務。使用 cro...