php對crontab的操做

php_crontab

基於pcntl和react/event-loop的定時任務管理器php

爲何使用php_crontab?

當咱們有少許的定時任務須要管理時,unix的crontab服務時足夠的。若是咱們有很是多的定時任務 須要管理時,機會有一些問題,例如:mysql

  • crontab服務經過一個文本文件管理定時任務,若是沒有註釋,對新人來講去理解他們是比較難的。react

  • 若是定時任務分散在許多機器上,管理他們也是比較難的。git

  • 若是你想收集他們的日誌,一樣不會簡單。github

  • 不一樣用戶的定時任務分散在不一樣的文件中。 基於以上幾點緣由,咱們須要一個能夠統一管理配置的定時任務管理器。redis

如何使用php_crontab?

有兩種方式使用php_crontab管理你的定時任務。 你能夠寫一個腳本,而後把它加入到crontab服務器中,每分鐘執行一次。例如tests/simple。 或者你能夠寫一個守護進程腳本,它會像一個服務同樣一隻運行,直到你殺死它。 它將每分鐘檢查一次定時任務。例如tests/daemon.phpsql

特性

  • 定時任務管理能夠被存儲在任何地方。例如:mysql、redis等。服務器

  • 定時任務的日誌能夠根據你的須要進行配置curl

  • 多個用戶的定時任務能夠統一管理ide

  • 多進程,每一個任務一個進程

  • 你能夠爲每一個任務設置用戶和用戶組

  • 標準輸出能夠進行重定向

  • 基於react/event-loop,它能夠做爲一個守護進程運行

  • 一個HTTP服務器,你能夠經過它管理定時任務

HTTP 接口

HTTP 方法: GET

  • add 增長任務

  • get_by_name 根據任務名稱獲取任務

  • remove_by_name 根據任務名稱刪除任務

  • clear 刪除全部任務

  • get 獲取全部任務

  • start 開始檢測定時任務

  • stop 中止檢測定時任務

示例:

http://host:port/add?name=name&cmd=cmd&time=time&out=out&user=user&group=group&comment=comment
http://host:port/get_by_name?name=name
http://host:port/remove_by_name?name=name
http://host:port/clear
http://host:port/get
http://host:port/start
http://host:port/stop

基於crontab服務運行

* * * * * php demo.php
<?php$missions = [    [        'name' => 'ls',        'cmd' => "ls -al",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',        'user' => 'www',        'group' => 'www'    ],    [        'name' => 'hostname',        'cmd' => "hostname",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',    ],];$tasks = array();foreach($missions as $mission){    $tasks[] = new \Jenner\Crontab\Mission($mission['name'], $mission['cmd'], $mission['time'], $mission['out']);}$crontab_server = new \Jenner\Crontab\Crontab(null, $tasks);$crontab_server->start(time());

做爲一個守護進程運行

it will check the task configs every minute.

$missions = [    [        'name' => 'ls',        'cmd' => "ls -al",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',        'user' => 'www',        'group' => 'www'    ],    [        'name' => 'hostname',        'cmd' => "hostname",        'out' => '/tmp/php_crontab.log',        'time' =>  '* * * * *',    ],];$daemon = new \Jenner\Crontab\Daemon($missions);$daemon->start();

做爲守護進程運行同時啓動一個http server

$missions = [    [        'name' => 'ls',        'cmd' => "ls -al",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',    ],    [        'name' => 'hostname',        'cmd' => "hostname",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',    ],];$http_daemon = new \Jenner\Crontab\HttpDaemon($missions, "php_crontab.log");$http_daemon->start($port = 6364);

Then you can manage the crontab task by curl like:

curl http://127.0.0.1:6364/get_by_name?name=ls
curl http://127.0.0.1:6364/remove_by_name?name=hostname
curl http://127.0.0.1:6364/get

啓動腳本

[root@jenner php_crontab]# ./bin/php_crontab php_crontab help:
-c  --config    crontab tasks config file
-p  --port      http server port
-f  --pid-file  daemon pid file
-l  --log       crontab log file
[root@jenner php_crontab]#nohup ./bin/php_crontab -c xxoo.php -p 8080 -f /var/php_crontab.pid -l /var/logs/php_crontab.log


https://github.com/huyanping/php_crontab/blob/master/README.zh.md

相關文章
相關標籤/搜索