crontab 问题

oldtwo

<?php
use Workerman\Worker;
require __DIR__ . '/../vendor/autoload.php';

use Workerman\Crontab\Crontab;

$worker = new Worker();

$worker->onWorkerStart = function () {
// Execute the function in the first second of every minute.
new Crontab('1 *', function(){
echo date('Y-m-d H:i:s')."\n";
});
};

Worker::runAll();
这里 要是新加一个crontab 是不是要重启 这个worker 那每次新加一个计划任务都要重启 多麻烦啊
onWorkerStart 不是只执行一次吗 每次启动的时候 。 那我新加一个配置项都要重启 多麻烦啊 线上可能不能重启啊

1211 3 1
3个回答

liziyu

https://workerman.net/plugin/42

你看下这里有没有什么启发。

  • 暂无评论
six

手册里只是一个例子,没有说只能那样用啊,程序猿嘛,脑袋要灵活些
比如:onWorkerStart定时从数据库读规则和回调,然后动态添加。
比如:onWorkerStart定时读取crontab配置,然后动态添加。
比如:onMessage里接收请求,然后从磁盘读取crontab配置,添加crontab
比如:onMessage里接收请求,直接添加crontab,像下面这样

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require __DIR__ . '/vendor/autoload.php';
use Workerman\Crontab\Crontab;

$worker = new Worker('http://127.0.0.1:8080');
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $cron = $request->get('cron');
    $cb = $request->get('cb');
    echo "install cron $cron $cb\n";
    new Crontab($cron, function() use ($cb) {
        var_dump($cb());
    });
    $connection->send('ok');
};
Worker::runAll();

例如每秒打印一次时间戳,url就是 http://127.0.0.1:8080/?cron=*/1%20*%20*%20*%20*%20*&cb=time
cb是要定时触发的函数名字,这里是time函数。

如果实在不会就用 @liziyu 发的别人写好的方案

  • 暂无评论
yzh52521
  • 暂无评论
年代过于久远,无法发表回答
×
🔝