Laravel 5.1 Windows 上的任务安排

Laravel 5.1 Task Scheduling on Windows

我正在尝试让 Laravel 5.1 任务计划在 IIS 上运行。当我使用 Windows 任务管理器 运行 一个批处理文件时,它只会 运行 任务一次。我怎样才能让 ->everyMinute() 工作?

Windows批处理文件:

cd c:\inetpub\myapp
c:\PROGRA~2\PHP\php.exe artisan schedule:run 1>> NUL 2>&1

内核:

class Kernel extends ConsoleKernel
{
    protected $commands = [

        \App\Console\Commands\MyCommand::class,

    ];

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('test')->everyMinute();
    }
}

命令:

public function handle()
    {
        log::info('test');
    }

看看 task scheduler 文档。

Starting The Scheduler

Here is the only Cron entry you need to add to your server:

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

This Cron will call the Laravel command scheduler every minute. Then, Laravel evaluates your scheduled tasks and runs the tasks that are due.

在您的情况下,您使用 Windows 任务调度程序而不是 Cron,但重要的是每分钟调用 artisan schedule:run。每次此命令 运行 时,它都会检查其计划并 运行 添加到期的 tasks/commands。

artisan schedule:run 不会启动一个长 运行ning 进程,该进程在您杀死它之前一直保持 运行s 任务。正如我所说,它需要每分钟调用一次。

您需要创建一个计划任务,每分钟执行一次该批处理文件。

这样做:

  • Win + R 和 运行 taskschd.msc

  • 在右侧面板中单击 创建基本任务 并为其命名 + 描述。

  • 单击“下一步”和“select启动程序选项,然后导航到批处理文件并select它。无需填写其他字段。

  • Select "Open the properties of this task..." 然后完成。

  • 触发选项卡上,您可以在每天登录时[=]之间切换56=](就像我一样)。

    这是没有记录的部分,打开保管箱并使用键盘插入 1,这是将重复时间设置为 1 分钟的唯一方法(即使下拉列表没有列出它)。

    Larevel 每分钟需要 cronjob 到 运行,否则将无法正常工作。

    同时检查 "Indefinitely" 到 运行 终生。

希望对您有所帮助。

Windows任务计划程序帮助here,如果你运行陷入困境。

Windows 确实支持 Laravel Scheduler 但是,您必须自己多次 运行 命令。由于我们不能像使用 linux crontab 那样每 1 分钟使用 Windows Task Scheduler 到 运行。如果您在开发环境中使用 windows 并想测试命令是否正常工作,您可以试试这个

如果你 运行

php artisan schedule:run

通过为每次试验提供最小间隙来多次执行命令。

如果你想运行直接执行命令,你可以按照这个。

"path\to\php.exe" "artisan" YourCommand > "NUL" 2>&1 &

您可以使用以下步骤找到 php.exe 的路径。

Run "where php.exe" in command prompt

我有一个解决方案 创建文件可执行文件 xxx.cmd,打开文件并写入下一个文本。

 @echo off

echo   - = = =   Schedule Run Jobs == = = = -


CD d: &&  CD \xampp\htdocs\folderlaravel && php artisan schedule:run

timeout 86400 

CD d: &&  CD \xampp\htdocs\folderlaravel && "Schedule.cmd"

pause

@cls

您所做的是 运行 和 运行 本身处于无限循环中,具体取决于给定的超时时间。在这种情况下 86400 => 1 天。

它有点模棱两可,但它有效:)

希望对你有用。