webman 定时任务 执行 2 次问题跟踪

woaichiyu

问题描述

前几天遇到添加的定时任务 Task,经常会同一时间执行两次。尝试了很多办法:
1、设置进程数 count = 1,无效
2、升级 crontab 包,composer workerman/crontab ^1.0.6 ,无效
3、安 webman 定时任务文档 check 了多遍,无效

试着删除 process.php 中添加的 task handler,在服务器上的 docker 环境正常了,定时任务可以每次只执行一次,本地的 Mac 电脑上却不执行任何定时任务了。

程序代码或配置

服务器使用的 docker 镜像:

version: "3.7"

services:
  data-tools:
    image: krisss/docker-webman:${DOCKER_WEBMAN_VERSION:-8.2-cli-alpine}
    ports:
      - "${DOCKER_WEBMAN_PORT:-8790}:8787"
    volumes:
      - .:/app

操作系统环境及workerman/webman等具体版本

webman 版本 1.5.16

参考帖子

https://www.workerman.net/q/10060

620 1 1
1个回答

walkor 打赏

定时任务代码怎么写的?写在什么地方的?

  • woaichiyu 2024-05-09

    定时任务写在 process 目录下的 Task.php

    
    
    <?php
    
    namespace process;
    
    use app\service\feishu\Assistant;
    use app\service\ThBalanceService;
    use support\Log;
    use Workerman\Crontab\Crontab;
    
    class Task
    {
    
            new Crontab('*/30 * * * * *', function () {
                $date = date('Y-m-d H:i:s');
                echo $date . "\n";
                Log::info(sprintf("send msg test %s", $date));
            });
        }
    }
    ```php
  • woaichiyu 2024-05-09

    日志输出:

    
    
    2024-05-08 23:04:00] default. INFO: send msg test 2024-05-08 23:04:00 []
    [2024-05-08 23:04:00] default. INFO: send msg test 2024-05-08 23:04:00 []
    [2024-05-08 23:04:30] default.INFO: send msg test 2024-05-08 23:04:30  []
    [2024-05-08 23:04:30] default. INFO: send msg test 2024-05-08 23:04:30 []
    [2024-05-08 23:05:00] default. INFO: send msg test 2024-05-08 23:05:00 [] 
    [2024-05-08 23:05:00] default. INFO: send msg test 2024-05-08 23:05:00 [] 
    [2024-05-08 23:05:30] default.INFO: send msg test 2024-05-08 23:05:30 []
    2024-05-08 23:05:301 default. INFO: send msg test 2024-05-08 23:05:30 []
    2024-05-08 23:06:00] default. INFO: send msg test 2024-05-08 23:06:00 []
    [2024-05-08 23:06:00] default. INFO: send msg test 2024-05-08 23:06:00 [] 
    
    # 注释 process.php 中添加的 task handler 后正常,每次输出一条
    [2024-05-08 23:07:00] default. INFO: send msg test 2024-05-08 23:07:00 []
    [2024-05-08 23:07:00] default. INFO: send msg test 2024-05-08 23:07:30 []
    [2024-05-08 23:07:00] default. INFO: send msg test 2024-05-08 23:08:00 []
  • walkor 2024-05-09

    代码不全,看不出设置定时任务的时机,onWorkerStart里运行的?
    可能是你服务器还有一个task进程没正常关闭。ps auxf能看到进程情况

  • woaichiyu 2024-05-09

    抱歉,代码没贴全:
    代码是在 onWorkerStart 里运行的。

    通过 ps auxf 确实查询到之前运行的一个容器在执行,感谢大佬!

×
🔝