by jenner · 2023年11月10日· 閱讀次數:6
linux的crontab一直是伺服器運維、業務開展的利器。但當定時任務增多時,管理和遷移都變得很麻煩,而且容易出問題。下面提供了乙個使用php編寫的crontab管理器,但仍需要在crontab下新增乙個一分鐘執行一次的叫來來執行這個管理器。通過這個管理器,可以實現以下目的:
這裡不建議你使用資料庫進行crontab配置管理,除非你能夠保證資料庫的請求能夠在長時間內保持穩定響應的話。推薦使用nosql型別的cache儲存,同時做好持久化備份。
廢話不多說,上一段測試**:
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傳遞第二個引數指定日誌檔案日誌(確保可寫)。日誌檔案內容如下:
[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 php_crontab_manager.php
管理器相關依賴:
jenner/multi_process包是乙個簡單的程序控制包,主要是為了在執行定時任務時,使用子程序執行,這樣父程序就不會阻塞,造成定時任務延遲的問題。
這個專案託管在github上,同時提供了packagist包支援,你可以通過在composer.json中新增:"jenner/crontab": "1.0.0"來載入這個包。
具體原始碼可以在github檢視。
基於php的crontab定時任務管理
基於PHP的crontab定時任務管理
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...