提前,请原谅我的英语不好。
我正在寻找能够从服务器调用控制器或特定 URL 的替代方案,但该服务器与任何互联网连接隔离,并且没有作曲家。因此我不能运行“php artisan”命令 目前它应该可以在 Windows 上运行。
这不可能吗?
从 PHP 或 Windows 或 Mysql/SQL-server 每隔 X 次从 laravel 调用一个 url 或控制器
你要执行的逻辑在哪里?
一个。 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。