我正在努力让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');
}
答案 0 :(得分:4)
查看task scheduler doc。
启动计划程序
以下是您需要添加到服务器的唯一Cron条目:
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
这个Cron每分钟都会调用Laravel命令调度程序。然后,Laravel评估您的计划任务并运行到期的任务。
在您的情况下,您使用Windows任务计划程序而不是Cron,但重要的是每分钟调用artisan schedule:run
。每次运行此命令时,它都会检查其计划并运行添加的到期任务/命令。
artisan schedule:run
无法启动一个长时间运行的进程,该进程在运行任务之前保持活动状态,直到您将其终止。正如我所说,它需要每分钟调用一次。
答案 1 :(得分:4)
您需要创建一个每分钟执行该批处理文件的计划任务。
这样做:
按赢取 + R 并运行taskschd.msc
在右侧面板中,单击创建基本任务并为其指定名称+说明。
单击下一步并选择启动程序选项,然后导航到批处理文件并选择它。无需填写其他字段。
选择"打开此任务的属性..."然后完成。
在触发器标签上,您可以在每日或登录时之间进行切换(与我一样)。
以下是未记录的部分,打开保管箱并使用键盘插入 1 ,这是将重复时间设置为1分钟的唯一方法(即使下拉列表)不列出它。)
Larevel
需要cronjob
每分钟运行一次,否则它不会按预期工作。
同时检查"无限期"运行它的生命周期。
希望它有所帮助。
如果遇到问题, Windows任务计划程序帮助为here。
答案 2 :(得分:1)
我有一个解决方案 创建到文件Executable 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天。
有点含糊不清但它有效:)
我希望它适合你。
答案 3 :(得分:0)
Windows确实支持 Laravel Scheduler ,但您已经多次自行运行该命令。由于我们无法使用 Windows任务计划程序每1分钟运行一次,因为我们可以使用linux crontab。如果您正在使用Windows开发环境,并且想要测试命令是否正在运行,则可以尝试此操作
如果你运行
多次执行php artisan schedule:运行
命令,为每次试验提供最小间隙,然后才能工作。
如果您想直接运行命令,可以按照此操作。
"路径\到\ php.exe的" "人员"你的命令> " NUL" 2>& 1&
您可以使用以下步骤找到php.exe的路径。
运行"其中php.exe"在命令提示符