Laravel - 如何在没有作曲家的情况下每 X 分钟运行一次控制器或调用 URL

问题描述 投票:0回答:1

提前,请原谅我的英语不好。

我正在寻找能够从服务器调用控制器或特定 URL 的替代方案,但该服务器与任何互联网连接隔离,并且没有作曲家。因此我不能运行“php artisan”命令 目前它应该可以在 Windows 上运行。

  1. 我有 laravel 10.x
  2. 我已经创建了一切来运行调度程序(但由于没有作曲家的限制我无法运行它)
  3. 我有 mysql 和 sqlserver(如果解决方案来自这里,它应该可以工作)

这不可能吗?

从 PHP 或 Windows 或 Mysql/SQL-server 每隔 X 次从 laravel 调用一个 url 或控制器

php mysql laravel windows scheduler
1个回答
0
投票

你要执行的逻辑在哪里?

一个。 PHP

b。 sql代码/存储过程


选项A:

我会说答案是Task Scheduler

Control Panel --> Administrative Tools --> Task Scheduler--> Create Task

“我有两个问题。1.如何知道服务器主机?2.如何 知道时间间隔,如果它存储在数据库中?”

不确定您所说的房东是什么意思。您将在代码所在的服务器上设置它。所以基本上在 localhost 上,例如 http://localhost/updatebookings.

间隔是否经常更改需要从BD读取?

您可以将任务设置为每 1 分钟或其他时间执行一次。任务将调用您的 url/api。在 api 中,你可以让你的代码从 db 读取间隔,并在 api 上有一些逻辑来决定代码是否将被执行或者它需要等待正确的时间(小时/分钟)。

我可能是错的,但是 php artisan 是否依赖于 composer?我认为这是 laravel 内置功能。在服务器上运行 php artisan schedule:work 时,你真的遇到了一些错误吗?

当使用 Laravel 的调度程序时,您只需要向我们的服务器添加一个 cron/task 调度程序配置条目,每分钟运行 schedule:run 命令。您可以使用 Task Scheduler 调用此 url。

use Illuminate\Support\Facades\Artisan;
...
Route::get('/schedulerrun', function() {
    Artisan::call('schedule:run');
});

或没有任务计划程序: https://laravel.com/docs/10.x/scheduling#running-the-scheduler-locally

如何使用 cmd/powershell 调度任务: https://serverfault.com/questions/829326/how-to-schedule-a-task-to-call-a-url

选项B:

如果业务逻辑是或者可以是SQL,那么您可以执行以下操作:

实际上,有两个选项,您可以使用 cron (task scheduler) 调用存储过程

use Illuminate\Support\Facades\DB;
...
Route::get('/updatebookings', function() {
    DB::unprepared("CALL `sp_UpdateBookings`");
});

或者您在 SQL Server 上的事件计划程序/SQL 作业。 SQL 作业将在定义的时间间隔内执行一些存储过程或其他 SQL 代码。

注意:您不能从 SQL 服务器调用 URL。

© www.soinside.com 2019 - 2024. All rights reserved.