前言

又收到主机运营商催费账单了,买了好多服务器貌似利用率太低,为了少花点钱,决定将一些网站整合,关的关。虽然之前搭的 v2board 一直在服务器上吃灰,但偶尔也要研究一下换成 xboard 等,就将这一坨顺手迁移到了另外一台服务器上。

本想着轻车熟路,无非就是迁移数据库和网站目录,重新添加系统任务,可某天扫了一眼,发现首页的统计图表虽然竖轴坐标都在 0 上,但横轴日期却定格在了迁移服务器的那一天,这明显是不对的。

问题分析

竖轴是订单数、金额、佣金这些,因为没有订单线都在 0 上没什么问题,但统计日期还在迁移服务器上那一天,说明每日统计任务没有执行。

翻看了下定时任务日志,每 3 分钟执行了一次且都执行成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
2026-03-21 10:42:01 Running ['artisan' check:order] .......... 319.90ms DONE
'php' 'artisan' check:order > '/dev/null' 2>&1
2026-03-21 10:42:02 Running ['artisan' check:commission] ..... 463.86ms DONE
'php' 'artisan' check:commission > '/dev/null' 2>&1
2026-03-21 10:42:02 Running ['artisan' check:ticket] ......... 797.45ms DONE
'php' 'artisan' check:ticket > '/dev/null' 2>&1
2026-03-21 10:42:03 Running ['artisan' reset:traffic] ........ 326.40ms DONE
'php' 'artisan' reset:traffic > '/dev/null' 2>&1
2026-03-21 10:42:03 Running ['artisan' cleanup:expired-online-status] 321.09ms DONE
'php' 'artisan' cleanup:expired-online-status > '/dev/null' 2>&1

----------------------------------------------------------------------------
★[2026-03-21 10:42:04] Successful
----------------------------------------------------------------------------

从日志可知定时任务没问题,但发现不同时间执行的任务条数不一,horizon:snapshot 这条命令就时有时无,但始终未发现 xboard:statistics

终端路径切换到网站目录下,手动执行统计任务 php artisan xboard:statistics,刷新发现图表就有当日统计了,说明统计功能没问题。去翻了下 app/Console/Kernel.php 源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
protected function schedule(Schedule $schedule): void
{
Cache::put(CacheKey::get('SCHEDULE_LAST_CHECK_AT', null), time());
// v2board
$schedule->command('xboard:statistics')->dailyAt('0:10')->onOneServer();
// check
$schedule->command('check:order')->everyMinute()->onOneServer()->withoutOverlapping(5);
$schedule->command('check:commission')->everyMinute()->onOneServer()->withoutOverlapping(5);
$schedule->command('check:ticket')->everyMinute()->onOneServer()->withoutOverlapping(5);
// reset
$schedule->command('reset:traffic')->everyMinute()->onOneServer()->withoutOverlapping(10);
$schedule->command('reset:log')->daily()->onOneServer();
// send
$schedule->command('send:remindMail', ['--force'])->dailyAt('11:30')->onOneServer();
// horizon metrics
$schedule->command('horizon:snapshot')->everyFiveMinutes()->onOneServer();
// backup Timing
// if (env('ENABLE_AUTO_BACKUP_AND_UPDATE', false)) {
// $schedule->command('backup:database', ['true'])->daily()->onOneServer();
// }
$schedule->command('cleanup:expired-online-status')->everyMinute()->onOneServer()->withoutOverlapping(4);

app(PluginManager::class)->registerPluginSchedules($schedule);

}

代码可见 xboard:statistics 写死了在每天 0:10 执行,而新服务器为了节约资源设置了 3分钟 执行一次,这样就永远凑不到那个时间!!

所以,将定时任务执行时间改成每分钟或者 10因数,问题解决。

相关命令

  1. php artisan list:查看支持的全部命令
  2. php artisan schedule:run:执行定时任务
  3. php artisan xboard:statistics:每日统计
  4. php artisan view:clear:清除前端缓存

相关文档

  1. v2board 面板统计空白,无邮件及 TG 通知问题
  2. v2board 面板节点在线用户数为 0